处理字符串时的神秘'1'

Ing*_*ürk 4 perl

我正在尝试处理每个字符的文件字符输入,但有一些1显示我不知道它们来自哪里.考虑这个例子:

文件 input

First row;
Second row;

Third row;
Run Code Online (Sandbox Code Playgroud)

文件 test.pl

#!/usr/bin/perl

open FILE, "<input";

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

close FILE;
Run Code Online (Sandbox Code Playgroud)

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

First row;
1Second row;
1
1Third row;
Run Code Online (Sandbox Code Playgroud)

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

小智 14

join //应该是join ''.

//,简称$_ =~ m//,是匹配运营商.因为它匹配成功,所以它返回了真值1.

(split特别之处在于它被视为split /.../类似的东西split qr/.../.)

顺便说一句,总是使用use strict; use warnings;.它在这里很有用.


Ben*_*Ben 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;
Run Code Online (Sandbox Code Playgroud)