The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"уделите минутку новичку в Perl'e"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"уделите минутку новичку в Perl'e"
Сообщение от Marushik Искать по авторуВ закладки(ok) on 12-Авг-04, 14:54  (MSK)
сижу изучаю книжку Стивен Холзнер "Perl. Специальный справочник" 2001, изд. "Питер". Там учать как разыменовывать ссылки(есть подозрение что перевод не блеск):
"примеры разыменовывания базовых типов:
scalar = $$scalarreference
@array=@$arrayreference
....
....
Прямая ссылка иногда заменяется возвращающим ее блоком. Вот как приведенные
выше приметы выглядят в случае применения блоков:
$scalar = ${$scalarreference}
@array=@{$arrayreference}..".
Комментариев к этим двум примерам особо никаких, но абсолютно не понятно, чем же эти два способа по сути отличаются? Что такое "возвращающий блок" ссылки?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "уделите минутку новичку в Perl'e"
Сообщение от ihor Искать по авторуВ закладки on 12-Авг-04, 15:13  (MSK)
Anywhere you'd put an identifier (or chain of identifiers) as part of a variable or subroutine name, you can replace the identifier with a BLOCK returning a reference of the correct type. In other words, the previous examples could be written like this:

    $bar = ${$scalarref};
    push(@{$arrayref}, $filename);
    ${$arrayref}[0] = "January";
    ${$hashref}{"KEY"} = "VALUE";
    &{$coderef}(1,2,3);
    $globref->print("output\n");  # iff IO::Handle is loaded

Admittedly, it's a little silly to use the curlies in this case, but the BLOCK can contain any arbitrary expression, in particular, subscripted expressions:

    &{ $dispatch{$index} }(1,2,3);      # call correct routine

Because of being able to omit the curlies for the simple case of $$x, people often make the mistake of viewing the dereferencing symbols as proper operators, and wonder about their precedence. If they were, though, you could use parentheses instead of braces. That's not the case. Consider the difference below; case 0 is a short-hand version of case 1, not case 2:

    $$hashref{"KEY"}   = "VALUE";       # CASE 0
    ${$hashref}{"KEY"} = "VALUE";       # CASE 1
    ${$hashref{"KEY"}} = "VALUE";       # CASE 2
    ${$hashref->{"KEY"}} = "VALUE";     # CASE 3

Case 2 is also deceptive in that you're accessing a variable called %hashref, not dereferencing through $hashref to the hash it's presumably referencing. That would be case 3.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "уделите минутку новичку в Perl'e"
Сообщение от mirya emailИскать по авторуВ закладки on 12-Авг-04, 16:03  (MSK)
краткое объяснение: ПЕРЛ основывается на стандартном для всех языком понятии программного блока (составной оператор и т.п.), причем блок есть выражение, значение к-рого - последнее вычисленное в нем выражение, т.е. нечто вроде { print "hello"; $val ? 34 : 57 } эквивалентно { print "hello"; return $val ? 34 : 57 } и вернет значение выражения $val ? 34 : 57 . аналогично { $data }
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "уделите минутку новичку в Perl'e"
Сообщение от Marushik Искать по авторуВ закладки(ok) on 12-Авг-04, 17:16  (MSK)
спасибо!
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру