Каков объем 1$ через 9$ в Perl?

Вы можете использовать программу Google для IOS Simulator Cropper, полезную для захвата снимков экрана, а также простую в использовании с различными вариантами создания снимков, как с симулятором / без симулятора.

Обновление Просто нажав CMD + S , вы получите скриншот, сохраненный на рабочем столе. Довольно просто, да ..

5
задан brian d foy 27 June 2009 в 16:10
поделиться

3 ответа

из perldoc perlre

Нумерованные переменные соответствия ($ 1, $ 2, $ 3 и т. Д.) И соответствующий набор знаков препинания ($ +, $ &, $ `, $ ' , и $ ^ N) все динамически ограничены до конца включающего блока или до следующего успешного совпадения, в зависимости от того, что наступит раньше. (См. «Составные операторы» в perlsyn.)

Это означает, что при первом запуске регулярного выражения или подстановки в области создается новая локальная преобразованная копия. Исходное значение восстанавливается (а-ля локально), когда область действия заканчивается. Итак, $ 1 будет равно 10 до тех пор, пока не будет выполнено регулярное выражение, 20 после регулярного выражения и снова 10. после завершения подпрограммы.

Но я не использую переменные регулярного выражения вне подстановок.

17
ответ дан 18 December 2019 в 06:51
поделиться

Внеся пару небольших изменений в код примера:

sub bla {
    my $x = shift;
    print "$1\n";
    $x =~ s/(\d+)/$1 $1/;
    return $x;
}
my $y = "hello world9";

# some code that manipulates $y

$y =~ /(\w*)\s+(\w*)/;

my $z = &bla($2);
my $w = $1;

print "$1 $2\n$z\n";

мы получим следующий результат:

hello
hello world9
world9 9

, показывающий, что $ 1 ограничен ] динамической области (то есть $ 1 , назначенный в bla , перестает существовать в конце этой функции (но $ 1 , назначенный из Регулярное выражение $ y доступно в bla , пока оно не будет перезаписано))

4
ответ дан 18 December 2019 в 06:51
поделиться

Переменные будут действительны до следующего раза, когда они будут записаны в потоке выполнения.

Но на самом деле вы должны использовать что-то вроде:

my ($match1, match2) = $var =~ /(\d+)\D(\d+)/;

Затем используйте $ match1 и $ match2 вместо $ 1 и $ 2, это гораздо менее двусмысленно.

2
ответ дан 18 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: