Perl 为什么我能';t将一个参数传递给sub
输入是目录名,输出是目录中的文本文件名以及文件名、行数、字数。 当我检查这个程序时,我可以知道第二个子系统什么时候工作,$\uu与“”完全不同 我该怎么修Perl 为什么我能';t将一个参数传递给sub,perl,Perl,输入是目录名,输出是目录中的文本文件名以及文件名、行数、字数。 当我检查这个程序时,我可以知道第二个子系统什么时候工作,$\uu与“”完全不同 我该怎么修 #!/usr/bin/perl use strict; use warnings; my $dir = <STDIN>; chomp($dir); # remove '\n'(new-line character) from directory address opendir(dirHandle, "$dir"); my @ar
#!/usr/bin/perl
use strict; use warnings;
my $dir = <STDIN>;
chomp($dir); # remove '\n'(new-line character) from directory address
opendir(dirHandle, "$dir");
my @arr = readdir(dirHandle);
close(dirHandle);
foreach(@arr){
if($_ =~ /.txt/){
print "File Name : $_\n";
my $tmp = $_;
print "Line Numb : ".&how_many_lines($_)."\n";
print "Word Numb : ".&how_many_words($_)."\n\n";
}
}
sub how_many_lines{
open(FILE, "$_") || die "Can't open '$_': $!";
my $cnt=0;
while(<FILE>){
$cnt++;
}
close(FILE);
return $cnt;
}
sub how_many_words{
open(TEXT, "$_") || die "Can't open '$_': $!";
# error! printed "Can't open ''" : No such file or directory
my $cnt=0;
while(<TEXT>){
my @tmp = split(/ /, $_);
my $num = @tmp;
$cnt += $num;
}
close(TEXT);
return $cnt;
}
#/usr/bin/perl
严格使用;使用警告;
我的$dir=;
吃($dir);#从目录地址中删除“\n”(新行字符)
opendir(dirHandle,“$dir”);
my@arr=readdir(dirHandle);
关闭(脏手柄);
foreach(@arr){
如果($\ux=~/.txt/){
打印“文件名:$\n”;
我的$tmp=$\ux;
打印“行编号:.”和多少行($)。“\n”;
打印“Word Numb:”&多少个单词($)。“\n\n”;
}
}
分多少行{
打开(文件“$”)| | die“无法打开“$”:$!”;
我的$cnt=0;
while(){
$cnt++;
}
关闭(文件);
返回$cnt;
}
分多少个单词{
打开(文本,“$”)| | die“无法打开“$”:$!”;
#错误!打印的“无法打开”:没有这样的文件或目录
我的$cnt=0;
while(){
my@tmp=split(//,$);
我的$num=@tmp;
$cnt+=$num;
}
关闭(文本);
返回$cnt;
}
您不能使用$\ucode>引用sub的第一个参数。它应该是$\u0]
,数组@
的第一个元素,它是参数列表
在sub中检索参数最惯用(不要与白痴混淆)的方法是:
my $filename = shift; # shift uses @_ automatically without arguments
Perl允许对标量、数组和散列使用相同的名称:$foo
、@foo
、%foo
是不同的实体。将数组@foo
索引为零时,它将变为$foo[0]
。这与$foo
不同