Perl分裂数组

时间:2014-05-05 13:45:56

标签: arrays perl file split

我是Perl的新手,我想编写一个简单的程序来读取输入文件并计算这个文件的字母,这是我的代码:

 #!/usr/bin/perl

 $textfile = "example.txt";
 open(FILE, "< $textfile");

 @array = split(//,<FILE>);
 $counter = 0;
 foreach(@array){
      $counter = $counter + 1;
 }

 print "Letters: $counter";

此代码显示了我的输入文件的数量,但仅适用于我的输入文件的第一段,它不适用于多个段落,任何人都可以帮助我,我不知道问题=( 谢谢

3 个答案:

答案 0 :(得分:2)

  • 你只读了一行。
  • 您计算字节数(可以使用-s),而不是字母。

修正:

my $count = 0;
while (<>) {
   $count += () = /\pL/g;
}

答案 1 :(得分:1)

你的代码是一种相当复杂的方式:

#!/usr/bin/perl

# Always use these
use strict;
use warnings;

# Define variables with my
my $textfile = "example.txt";
# Lexical filehandle, three-argument open
# Check return from open, give sensible error
open(my $file, '<', $textfile) or die "Can't open $textfile: $!"

# No need for an array.
my $counter = length <$file>;

print "Letters: $counter";

但是,正如其他人所指出的那样,你计算字节而不是字符。如果您的文件是ASCII或8位编码,那么你应该没问题。否则你应该看看perluniintro

答案 2 :(得分:-1)

这是使用模块进行工作的另一种方法..

# the following two lines enforce 'clean' code
use strict;
use warnings;

# load some help (read_file)
use File::Slurp;

# load the file into the variable $text
my $text = read_file('example.txt');

#get rid of multiple whitespace and linefeed chars # ****
# and replace them with a single space             # ****
$text =~ s/\s+/ /;                                 # ****

# length gives you the length of the 'string' / scalar variable
print length($text);

您可能想要注明标有“ **** ”的行 并使用代码...