4

我正在尝试处理每个字符的文件字符的输入,但是出现了一些1我不知道它们来自哪里的 s。考虑这个例子:

文件input

First row;
Second row;

Third row;

文件test.pl

#!/usr/bin/perl

open FILE, "<input";

my @characters = split //, join //, <FILE>;
for( @characters ) {
  print $_;
}

close FILE;

我希望这个脚本只打印的内容input(尽管以一种非常复杂的方式——这只是一个例子)。但是,当我运行时./test.pl,我得到以下输出:

First row;
1Second row;
1
1Third row;

现在我的问题是:这些1角色是从哪里来的?

4

2 回答 2

14

join //应该是join ''

//, 的缩写$_ =~ m//, 是一个匹配运算符。因为匹配成功,所以返回真值1

(split特殊之处在于它被视为split /.../类似于split qr/.../.)

顺便说一句,始终使用use strict; use warnings;. 在这里会很有用。

于 2013-06-27T18:46:35.173 回答
7

根据 perldoc join

Beware that unlike split, join doesn't take a pattern as its first argument.

在此处查看更多信息:http: //perldoc.perl.org/functions/join.html

将第一个参数更改为文字空字符串""可以按预期工作:

[ben@lappy ~]$ cat test.pl
#!/usr/bin/perl

open FILE, "<input";

my @characters = split //, join "", <FILE>;
for( @characters ) {
  print $_;
}

close FILE;

[ben@lappy ~]$ perl test.pl
First row;
Second row;

Third row;
于 2013-06-27T18:49:19.980 回答