用于计算单词/行的Perl脚本

4 scripting perl

我是第一次学习PERL而且我试图在本文档的第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";
Run Code Online (Sandbox Code Playgroud)

这是我的文本文件:

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.
Run Code Online (Sandbox Code Playgroud)

我没有得到正确的输出,我不知道为什么.我的输出是:

C:\Users\KP\Desktop\test>perl example.pl test.txt
the file contains lines and  words
Run Code Online (Sandbox Code Playgroud)

nau*_*cho 6

出于某种原因,所有"="运算符都显示为" - "

$line_count - 0;
$word_count - 0;
...
while ($line - <INFILE>) {
...
@words_on_this_line - split(" ",$line);
Run Code Online (Sandbox Code Playgroud)

我建议使用"my"来声明你的变量然后"use strict"和"use warnings"来帮助你检测这样的错别字:

目前:

$i -1;
Run Code Online (Sandbox Code Playgroud)

/tmp/test.pl - 没有输出

添加严格和警告时:

use strict;
use warnings;

$i -1;
Run Code Online (Sandbox Code Playgroud)

/tmp/test.pl全局符号"$ i"需要在/tmp/test.pl第4行显式包名.由于编译错误,/ tmp/test.pl的执行被中止.

当你添加"我的"来声明它:

vim /tmp/test.pl
use strict;
use warnings;

my $i -1;
Run Code Online (Sandbox Code Playgroud)

/tmp/test.pl在/tmp/test.pl第4行的void上下文中无用的减法( - )4.在/tmp/test.pl第4行的减法( - )中使用未初始化的值.

最后用"="而不是" - "拼写错误 - 这就是正确的声明和initializatoin的样子:

use strict;
use warnings;

my $i = 1;
Run Code Online (Sandbox Code Playgroud)