Почему perl переводит галочку в двоеточие? - программирование
Подтвердить что ты не робот

Почему perl переводит галочку в двоеточие?

Учитывая эту программу:

use strict;
use warnings;

my $zx_size = 32;
my $x = "$zx_size'h0";

Perl говорит мне следующее:

Name "zx_size::h0" used only once: possible typo at concat.pl line 7.
Use of uninitialized value $zx_size::h0 in string at concat.pl line 7.

Почему?

Похоже, существует несколько способов указать пространство имен для var. Есть ли другие?

Можно ли отключить это поведение?

4b9b3361

Ответ 1

Старый разделитель пакетов был одинарной цитатой ', которая изначально использовалась для облегчения перехода на Perl для программистов Ada. Он был заменен на ::, чтобы быть более читаемым и облегчить переход программистов на С++.

Он по-прежнему поддерживается для обратной совместимости, но вы можете обернуть скаляр в {..}, чтобы он правильно интерполировал.

my $x = "${zx_size}'h0";

или

my $x = "$zx_size\'h0";

Ответ 2

Символ одиночной кавычки ' использовался предыдущими Perls для обозначения области пакета так же, как ::, и он по-прежнему поддерживается для обратной совместимости.

Чтобы сделать то, что вы хотите, вам нужно использовать синтаксис ${}, чтобы сообщить Perl, где заканчивается идентификатор, и начинается литерал:

"${zx_size}'h0"

Обратите внимание, что это то же самое, что вам нужно было бы сделать, если бы вы хотели значение $zx_size, за которым следовал любой другой литерал, который должен появиться в идентификаторе:

"${zx_size}foo"

Ответ 3

Прочитайте perlmod. Самый второй абзац. И нет, нет способа отключить его, по крайней мере пока. Теоретически, кто-то мог написать прагму no feature для нее, но так было 20 лет, не вызывая слишком много проблем...