я в настоящее время изучение «разыменования» в Perl и нужна ваша помощь в понимании того, что «\» означает, что в строке ниже ..Что означает «» в Perl?
$ra = \$a;
я в настоящее время изучение «разыменования» в Perl и нужна ваша помощь в понимании того, что «\» означает, что в строке ниже ..Что означает «» в Perl?
$ra = \$a;
См perlop.
Унарный "\" создает ссылку на все, что следует за ним. См. perlreftut и perlref. Не путайте это поведение по поведению обратную косую черту в строке, хотя обе формы передают понятие , защищая следующую вещь от интерполяция.
Собственно, или создает несколько ссылок на несколько вещей, следующих в контексте списка *, например, '' @r = \\ (@ a,% b, & c) 'и' @r = \ localtime'. – tchrist
Когда есть обратная косая черта «\» в регулярном выражении или в строке, она называется ESCAPE, в противном случае она называется REFERENCE – jjpcondor
Он создает ссылку на переменную с правой стороны; вроде как указатель на C (без арифметики указателя) или указатель на Java.
См. perldoc perlref для получения более подробной информации по этому вопросу.
Dereferentiation осуществляется через $$a
для скаляров, @$a
для массивов и т.д.
@tchrist. Этот ответ не является ошибочным. Это не полностью говорит вам, что делает, но вопрос не был «что делает оператор \ во всех случаях», это было «то, что означает« \ »в строке ниже». Строка ниже была '$ ra = \ $ a;', и в этой строке она создает ссылку на переменную справа. Ответ также указывает справочный документ, который полностью объясняет оператора. –
@ Час. Оуэнс: это неполный ответ на название этого вопроса. – tchrist
Хорошо, я полагаю, что в строке '$ ra = \ $ a;' ссылка на переменную с правой стороны не создается тогда: P – mfontani
документация Perl велик и тщательно, использовать его рано и часто. Могу ли я рекомендовать perldoc perlreftut
, учебник по perl-ссылкам, или perldoc perlref
для получения дополнительной информации. Впоследствии perldoc perlintro
и perldoc perltoc
или perldoc perl
, чтобы посмотреть, куда идти.
И да, он создает ссылку на переменную $ a и сохраняет ее в переменной $ ra.
Как я уже в другом месте ранее списанный ...
Унарное \
создает ссылку на то, что следует за ним. Используется в списке, он создает список ссылок.
Не путайте это поведение с поведением обратного слэша внутри строки, хотя обе формы передают неопределенно негативное представление о защите следующей вещи от интерпретации. Это сходство не совсем случайно.
Вы можете создать ссылку на любую именованную переменную или подпрограмму с обратным слэшем. Вы также можете использовать его по анонимному скалярному значению, например 7
или "camel"
, хотя вам это не понадобится. Этот оператор работает как оператор &
(адрес) в C или C⁺⁺ - по крайней мере, на первый взгляд.
Вот некоторые примеры:
$scalarref = \$foo;
$constref = \186_282.42;
$arrayref = \@ARGV;
$hashref = \%ENV;
$coderef = \&handler;
$globref = \*STDOUT;
Оператор обратный слэш может сделать больше, чем производить одной ссылки. Он будет генерировать целый список ссылок, если он применяется к списку.
Как упоминалось ранее, оператор обратной косой черты обычно используется для одного референта для создания единственной ссылки, но это необязательно. При использовании в списке референтов он выдает список соответствующих ссылок. Вторая строка в следующем примере делает то же самое, что и первая строка, так как обратная косая черта автоматически распространяется по всему списку.
@reflist = (\$s, \@a, \%h, \&f); # List of four references
@reflist = \($s, @a %h, &f); # Same thing
Если в скобках список содержит ровно один массив или хэш, то все его значений интерполируются и ссылки на каждый возвращенных:
@reflist = \(@x); # Interpolate array, then get refs
@reflist = map { \$_ } @x; # Same thing
Это также происходит, когда есть внутренние скобки:
@reflist = \(@x, (@y)); # But only single aggregates expand
@reflist = (\@x, map { \$_ } @y); # Same thing
Если вы попробуете это с хешем, результат будет содержать ссылки на значения (как и следовало ожидать), но ссылки на экземпляры ключей (как вы могли нет ожидаем).
Поскольку массивы и хэш-фрагменты действительно представляют собой списки, вы можете запрограммировать фрагмент любой из них, чтобы получить список ссылок. Каждая из следующих четырех строк делает то же самое:
@envrefs = \@ENV{"HOME", "TERM"}; # Backslashing a slice
@envrefs = \@ENV{ qw<HOME TERM> }; # Backslashing a slice
@envrefs = \($ENV{HOME}, $ENV{TERM}); # Backslashing a list
@envrefs = (\$ENV{HOME}, \$ENV{TERM}); # A list of two references
Поскольку функции могут возвращать списки, вы можете применить обратную косую черту к ним. Если у вас есть более одной функции для вызова, первый интерполировать возвращаемые значения каждой функции в в больший список, а затем обратную косую черту все это:
@reflist = \fx();
@reflist = map { \$_ } fx(); # Same thing
@reflist = \(fx(), fy(), fz());
@reflist = (\fx(), \fy(), \fz()); # Same thing
@reflist = map { \$_ } fx(), fy(), fz(); # Same thing
Оператор обратной косой черты всегда снабжает контекст списка для операнда, поэтому эти функции все вызваны в контексте списка. Если обратный слэш сама в скалярном контексте, вы в конечном итоге со ссылкой на последнее значение в списке, возвращаемом функцией:
@reflist = \localtime(); # Ref to each of nine time elements
$lastref = \localtime(); # Ref to whether it’s daylight savings time
В связи с этим, обратный слеш ведет себя как в названном списке Perl операторы , такие как print
, reverse
и sort
, которые всегда снабжают контекст списка справа от них, независимо от того, что может происходить слева. Как с именованными операторами списка, используйте явное scalar
, чтобы заставить то, что следует в контексте скаляра:
$dateref = \scalar localtime(); # \"Sat Nov 13 10:41:30 2010"
И теперь вы знаете ... в остальное истории.
(с извинениями покойного Пола Харви)
Я просто использовал ссылку на DATA с \\ * DATA, чтобы использовать Шаблон :: Инструментарий с LaTeX. Я поместил раздел LaTeX в раздел DATA, а затем использовал ссылку на него как шаблон в 'process': Perl настолько классный. –
Также спасибо за то, что \\ (...) распределяет, создавая ссылку ref для каждого элемента. Я бы предположил, что сделает ссылку на массив этого списка, но теперь это имеет смысл, в противном случае нам нужно [...] для. Спасибо –
, что действительно всеобъемлющий, это tchrist. – Roy
Если вы в настоящее время узнав об этом, то, что ваши книги и учебные пособия говорят? – Ether
мои лекционные заметки не уточнили, что это значит, что привело меня к поиску в google. не нашел satis ans, поэтому я спросил его здесь. – Roy
@Roy: убедитесь, что вы выбрали правильный ответ. ☹ – tchrist