Подписание и конкатенация строк - PullRequest
3 голосов
/ 13 января 2011

Добрый день,

Для работы мне вдруг стало необходимо знать 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

И много новых строк.Я понятия не имею, почему это так.Кто-нибудь может мне помочь и объяснить, возможно, как все эти аргументы, передаваемые в subs в Perl, работают?Кажется, очень интересно работать с такими вещами, как @_ и shift, но набор текста ... это кошмар.

Спасибо за внимание.

1 Ответ

7 голосов
/ 13 января 2011

Ваша проблема заключается в том, как работает chomp;он не возвращает переменную 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...