子写和字符串连接

Lan*_*nbo 3 perl

美好的一天,

对于工作,我突然需要知道Perl,虽然我几年前曾涉足这些艺术,但我似乎完全迷失了.对于Haskell/Java程序员来说,所有这些非结构化的打字都会让人紧张.

但是,我写了这个sub,它应该采用一行单行字符串并将它们连接成一个单行的多行字符串.我有它喜欢这样:

sub unlines {
    my ( @lines ) = @_;
    my $str = "";
    foreach $line ( @lines ) {
        $str = join $str, chomp($line), "\n";
    }
    return $str;
}
Run Code Online (Sandbox Code Playgroud)

然后我想测试它,当然:

print unlines(("GET / http1.1", "Host: localhost", ""));
Run Code Online (Sandbox Code Playgroud)

事情的结果是

000
Run Code Online (Sandbox Code Playgroud)

还有很多换行.我完全不知道为什么会这样.任何人都可以帮助我,并解释一下,所有这些参数如何传递给Perl中的sub都有效?这似乎是很有趣的事情一样工作@_shift,但打字......这是一场噩梦.

谢谢收听.

Ed *_*ess 7

你的麻烦在于如何运作; 它不返回chomped变量,它返回删除的字符数并就地修改变量.

所以先点头加入,然后加入,就像这样...

C:\temp>cat test.pl
my @lines = ('abc','def');
chomp @lines;
print join "\n",@lines;

C:\temp>test.pl
abc
def
C:\temp>
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这是你的unlines()看起来的样子

sub unlines {
    my @lines = @_;
    chomp @lines;    
    return join "\n", @lines;
}
Run Code Online (Sandbox Code Playgroud)