Чтобы получить ответы perldoc perlvar
, вы можете сделать одну (как минимум) две вещи.
1) Set $"
(разделитель списка):
Когда массив или срез массива интерполируются в двойные кавычки
строка или аналогичный контекст, такой как /.../, ее элементы разделены
по этому значению. По умолчанию это пробел. Например, это:
print "The array is: @array\n";
эквивалентно этому:
print "The array is: " . join($", @array) . "\n";
=> $"
влияет на поведение интерполяции массива в строку
2) Установить $,
(разделитель выходного поля):
Разделитель полей вывода для оператора печати. Если определено, это
значение печатается между каждым из аргументов печати. По умолчанию это undef.
Мнемоника: что печатается, когда в вашем операторе печати есть ",".
=> $,
влияет на поведение оператора print
.
Любой из них будет работать, и любой из них может использоваться с local
для установки значения специальной переменной только в пределах области видимости. Я думаю, разница в том, что с $"
вы не ограничены командой печати:
my @z = qw/ a b c /;
local $" = " and ";
my $line = "@z";
print $line;
здесь "магия" происходит в 3-й строке, а не в команде печати.
По правде говоря, использование join
является наиболее читабельным, и если вы не используете небольшой вмещающий блок, будущий читатель может не заметить установки магической переменной (скажем, ближе к вершине) и никогда не увидит, что поведение не то, что ожидается против нормальной производительности. Я хотел бы сохранить эти уловки для небольших разовых и однострочников и использовать читаемый join
для производственного кода.