Можно ли передать аргументы типа sprintf в функцию Perl? - PullRequest
3 голосов
/ 29 декабря 2010

Рассмотрим следующий пример кода.

my $a = "test";
my $b = "stackoverflow";

test("%s - %s\n", $a, $b);

sub test {
    my $error = sprintf(@_);
    print $error;
}

Это печатает 3, а не отформатированную строку.Можно ли даже сделать то, что я пытаюсь?

Ответы [ 2 ]

8 голосов
/ 29 декабря 2010

Как предположил VGE, это прототип, который вызывает проблемы, но вам нужно использовать shift, а не pop:

sub test {
    my $error = sprintf(shift, @_);
    print $error;
}

sprintf оценивает свой первый аргумент в скалярном контексте. Если это массив, вы получите длину массива.

1 голос
/ 29 декабря 2010

Perldoc говорит sprintf ФОРМАТ, СПИСОК

Возвращает строку, отформатированную обычными соглашениями printf функции библиотеки C sprintf. Для получения более подробной информации смотрите ниже и смотрите sprintf (3) или printf (3) в вашей системе для объяснения общих принципов.

Я никогда не пробовал этого, но, я думаю, вы можете попробовать набрать @_, чтобы получить формат и передать оставшийся список после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...