请教高手三道perl问题
1.与打开文件的句柄相关。我将test.txt与test.pl放置在同级目录下。我写的test.plmy$success=openTEST,"test.txt";if(!...
1.与打开文件的句柄相关。
我将test.txt与test.pl放置在同级目录下。
我写的test.pl
my $success = open TEST,"test.txt";
if(!$success){
print "Fail to open file";
}
test.txt文件是存在的。但为什么总是打印出 Fail to open file
2. 写一个程序,提示用户输入 given name(名),并给出其对应的 family name(姓)。
我写的代码如下:
%some_hash = {"fred" => "flintstone",
"barney" => "rubble",
"wilma" => "filintstone",
};
print "Please enter the given name:";
$_ = <STDIN>;
chomp $_;
if(exists $some_hash{$_}){
print "$_ family name is $some_hash{$_}\n";
}
这个程序怎么没有打印出任何东西。我猜想是exist这步错了,但是实在无法找到错误
3.
写一个程序,读入一串单词( 一个单词一行) ◆,输出每一个单词出现的次数。(提示:如果某个作为数字使用值是undefined 的,会自动将它转换为 0。)如果输入单词为 fred, barney, dino, wilma , fred(在不同行中), 则输出的 fred 将为3。将输出的单词按照 ASCII 排序。
我写的代码运行后没有任何输出
print "Please enter some world:\n";
chomp(@lines = <>);
foreach (@Lines){
$hash{$_} += 1;
}
foreach (sort (keys %hash)){
print "$_ => $hash{$_}\n;"
} 展开
我将test.txt与test.pl放置在同级目录下。
我写的test.pl
my $success = open TEST,"test.txt";
if(!$success){
print "Fail to open file";
}
test.txt文件是存在的。但为什么总是打印出 Fail to open file
2. 写一个程序,提示用户输入 given name(名),并给出其对应的 family name(姓)。
我写的代码如下:
%some_hash = {"fred" => "flintstone",
"barney" => "rubble",
"wilma" => "filintstone",
};
print "Please enter the given name:";
$_ = <STDIN>;
chomp $_;
if(exists $some_hash{$_}){
print "$_ family name is $some_hash{$_}\n";
}
这个程序怎么没有打印出任何东西。我猜想是exist这步错了,但是实在无法找到错误
3.
写一个程序,读入一串单词( 一个单词一行) ◆,输出每一个单词出现的次数。(提示:如果某个作为数字使用值是undefined 的,会自动将它转换为 0。)如果输入单词为 fred, barney, dino, wilma , fred(在不同行中), 则输出的 fred 将为3。将输出的单词按照 ASCII 排序。
我写的代码运行后没有任何输出
print "Please enter some world:\n";
chomp(@lines = <>);
foreach (@Lines){
$hash{$_} += 1;
}
foreach (sort (keys %hash)){
print "$_ => $hash{$_}\n;"
} 展开
1个回答
展开全部
估计你的初始路径是在perl 的dir 而不是 test.pl 的 dir, 你试执行以下两句代码
use Cwd; print cwd;
要不, 你就写全路径 open F, "C:/...../text.txt";
你写的是 %some_hash = {"fred" => "flintstone",.... };
而不是 %some_hash = ( "fred" => "flintstone",.... ) ;
%some_hash = {"fred" => "flintstone",.... }; 基本上是只有键, 而没有值的 hash
chomp(@lines = <>); 这种写法不是给人机交互的情境上用的, 系要读到字串, 得改成这样
my @lines; my $last;
while ( 1 ) {
chomp ( my $input = <STDIN> );
push @lines , $input;
last unless $input;
}
foreach my $line ( @lines ) {
....
}
更多追问追答
追问
非常感谢解答。但是对于第三题。我在网上搜到如下代码,运行后是可用的,我实在不知道和我代码的差别。你能看出来吗?
chomp(@words = );
foreach (@words)
{
$hash{$_} ++;
}
foreach (sort (keys %hash))
{
print "$_ => $hash{$_}","\n";
}
追答
动... 是可以, 也是不可以, 因为你得打得出个 ^Z 才能中断这个输入. 一般就不会这麼做了.
但如果你问我差别, 那就是
chomp(@lines = ); <--- 这是小写
foreach (@Lines){ <--- 这是大写
建议你 use strict;
use strict;
my @lines ;
print "@Lines" ; # <-- 你就会得到报错的提示了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询