我第一次学习PERL,我试图在document的第4页完全复制简单的Perl脚本:
这是我的代码:
# example.pl, introductory example
# comments begin with the sharp sign
# open the file whose name is given in the first argument on the command
# line, assigning to a file handle INFILE (it is customary to choose
# all-caps names for file handles in Perl); file handles do not have any
# prefixing punctuation
open(INFILE,$ARGV[0]);
# names of scalar variables must begin with $
$line_count - 0;
$word_count - 0;
# <> construct means read one line; undefined response signals EOF
while ($line - <INFILE>) {
$line_count++;
# break $line into an array of tokens separated by " ", using split()
# (array names must begin with @)
@words_on_this_line - split(" ",$line);
# scalar() gives the length of an array
$word_count += scalar(@words_on_this_line);
}
print "the file contains ", $line_count, "lines and ", $word_count, " words\n";
这是我的文本文件:
This is a test file for the example code.
The code is written in Perl.
It counts the amount of lines
and the amount of words.
This is the end of the text file that will
be run
on the example
code.
我没有得到正确的输出,我不知道为什么。我的输出是:
C:\Users\KP\Desktop\test>perl example.pl test.txt
the file contains lines and words
答案 0 :(得分:6)
出于某种原因,所有“=”运算符都显示为“ - ”
$line_count - 0;
$word_count - 0;
...
while ($line - <INFILE>) {
...
@words_on_this_line - split(" ",$line);
我建议使用“my”声明你的变量,然后使用“use strict”和“use warnings”来帮助你检测这样的拼写错误:
目前:
$i -1;
/tmp/test.pl - 无输出
添加严格和警告时:
use strict;
use warnings;
$i -1;
/tmp/test.pl全局符号“$ i”需要显式包名称 /tmp/test.pl第4行。/ tmp / test.pl的执行因中止而中止 编译错误。
当你添加“我的”来声明它时:
vim /tmp/test.pl
use strict;
use warnings;
my $i -1;
/tmp/test.pl在void上下文中无用的减法( - ) /tmp/test.pl第4行。在减法( - )中使用未初始化的值 /tmp/test.pl第4行。
最后用“=”而不是“ - ”拼写错误 - 这就是正确的声明和initializatoin的样子:
use strict;
use warnings;
my $i = 1;
答案 1 :(得分:3)
您必须在代码中的多个句子中更改 - by =。另外,我已经包含了一些与获得更现代的perl代码相关的更改(use strict
这是必须的)
use strict;
use warnings;
open my $INFILE, '<', $ARGV[0] or die $!;
# names of scalar variables must begin with $
my $line_count = 0;
my $word_count = 0;
# <> construct means read one line; undefined response signals EOF
while( my $line = <$INFILE> ) {
$line_count++;
# break $line into an array of tokens separated by " ", using split()
# (array names must begin with @)
my @words_on_this_line = split / /,$line;
# scalar() gives the length of an array
$word_count += scalar(@words_on_this_line);
}
print "the file contains ", $line_count, "lines and ", $word_count, " words\n";
close $INFILE;
答案 2 :(得分:2)
替换while ($line - <INFILE>) {
与
while ($line = <INFILE>) {
答案 3 :(得分:1)
单词计数部分可以更简单(更有效)。如果在标量上下文中调用,则Split返回数字元素。
替换
my @words_on_this_line = split / /,$line;
$word_count += scalar(@words_on_this_line);
与
$word_count += split / /,$line;