Почему имя переменной, за которым следует подчеркивание, не оценивается правильно во время интерполяции строк в Perl? - PullRequest
7 голосов
/ 21 августа 2011

Почему имя переменной, за которым следует подчеркивание, не обрабатывается правильно при интерполяции строки в Perl?

my $i = 3;

print "i = $i\n"; # works, prints "i = 3"
print "_i = _$i\n"; # works, prints "_i = _3"
print "i_ = $i_\n"; # FAILS, prints "i_ = "
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _"

Ответы [ 4 ]

23 голосов
/ 21 августа 2011

В дополнение к другим ответам вы можете использовать альтернативный синтаксис для задания переменных:

print "i_ = ${i}_\n";

Обратите внимание на использование фигурных скобок: { и } для указания имени переменной.Если вы сомневаетесь, вы можете выбрать этот синтаксис.

18 голосов
/ 21 августа 2011

$i_ является допустимым идентификатором, поэтому он пытается напечатать значение этой переменной (которое вы не установили, поэтому оно равно undef).

Включите strict и warnings.

7 голосов
/ 21 августа 2011

Мат прав. Если вам действительно нужно это подчеркивание сразу после значения, используйте обратную косую черту: "$i\_".

3 голосов
/ 21 августа 2011

Всегда используйте их:

use strict;
use warnings;
...