子写和字符串连接

时间:2011-01-13 11:17:52

标签: perl

美好的一天,

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

然而,我写了这个sub,它应该采用一系列单行字符串并将它们连接成一个单行的多行字符串。我喜欢它:

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

然后我想测试它,当然:

print unlines(("GET / http1.1", "Host: localhost", ""));

事情的结果是

000

还有很多新行。我完全不知道为什么会这样。任何人都可以帮助我,并解释一下,所有这些论证如何传递给Perl中的sub?使用@_shift之类的东西似乎非常有趣,但输入......这是一场噩梦。

感谢收听。

1 个答案:

答案 0 :(得分: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>

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

sub unlines {
    my @lines = @_;
    chomp @lines;    
    return join "\n", @lines;
}