Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нашел интересную фишку в PERL 
:(
    Опции темы
tolkien
Дата 4.6.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Если поставить косую черту перед вызовом функции, то все возвращаемые данные будут ссылками

Код

$text = "123 Hello world!";
$subs = substr($text, 4);
print $subs,"\n";
$subs = \substr($text, 4);
print $subs,"\n";


Вывод: 
Hello world!
LVALUE(0x1a9fd5c)

PM MAIL   Вверх
sir_nuf_nuf
Дата 4.6.2008, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



в чем фишка ?
данные возвращаются так же как и раньше, только после этого к ним применяется оператор \ , т.е. взятие адреса.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
BurnerCode
Дата 4.6.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.2.2008
Где: Беларусь

Репутация: нет
Всего: нет



гы)

а можна еще значение хеша сделать вызов ф-ций

Код

#!/usr/bin/perl
use strict;
use warnings;

my %hash = 
(
    1 => \hello(),
    2 => &hello2,
);


print ${$hash{1}} . "\n";
print $hash{2} . "\n";

sub hello
{
    return 'Hello Jack';
}

sub hello2
{
    return 'Hello Perl';
}

PM MAIL   Вверх
nitr
Дата 4.6.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Вы оба приколисты.

BurnerCode, то что вы указали часто используют в ООП smile


--------------------
PM   Вверх
Bulat
Дата 4.6.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Помнится была моя тема недавно, про классы smile Там все это было разложено smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ginnie
Дата 4.6.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый nitr, почему они оба приколисты?

Коллеги, кто догадается, что вернет код

Код

sub func {
    my $test = 10;
    return \$test;
}
my $value = \func();
warn $value;


Для тех, кто догадался, дополнительный вопрос: что вернет
Код

sub func {
    my $test = 10;
    return \$test;
}
my $value = \func();
warn ref $value;


Я раньше такое не встречал  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
BurnerCode
  Дата 4.6.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.2.2008
Где: Беларусь

Репутация: нет
Всего: нет



Да это проста тройная ссылка на скаляр 
PM MAIL   Вверх
ginnie
Дата 4.6.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата

Да это проста тройная ссылка на скаляр 


 smile вот как все просто  smile и вроде сегодня не понедельник  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
BurnerCode
Дата 4.6.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.2.2008
Где: Беларусь

Репутация: нет
Всего: нет



я вообще не понял этот пост =)
PM MAIL   Вверх
ginnie
Дата 4.6.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



BurnerCode, я тоже не понял что есть "тройная ссылка на скаляр"?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
BurnerCode
Дата 4.6.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 28.2.2008
Где: Беларусь

Репутация: нет
Всего: нет



Ну может выразился не так но мысль верная =)

print $$$value

ps: ссылка на ссылку - scalar =)
PM MAIL   Вверх
nitr
Дата 4.6.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Аналогично

Код
my $str;
warn \(\$str);


ginnie,  сначала обрабатывается функция, а потом ссылка на неё, для тех кто в курсе, когда можно "опускать" скобки, увидят разницу сразу.
Я про простые примеры smile
Код
#!perl

sub test {
    return \10;
}

warn test();
warn \(test()); #а можно \test()


ginnie, и я точно понимаю, что вы это всё знаете smile

BurnerCode, это не зависит на что ссылка scalar, array, hash, code и т.д. ;)
Код
#!perl

sub test {
    return [1,2];
}

warn test();
warn \test();


Это сообщение отредактировал(а) nitr - 4.6.2008, 12:11


--------------------
PM   Вверх
ginnie
Дата 4.6.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



nitr, со скобками Вы промахнулись (лучше использовать фигурные). Круглые скобки форсируют списочный контекст. Я решил этот вопрос немного поизучать и появилась новая задача:

Код

my $value = split(/_/, q{a_b});
warn $value;


предыдущий код выводит 2 - количество элементов списка, полученного в результате split()

что выведет этот код?

Код

my $value = \split(/_/, q{a_b});
warn $$value; 



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
nitr
Дата 4.6.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



ginnie, вы всё уверенней хотите запутать smile
Сейчас вы привели совершенно другой пример, чем были до этого smile


--------------------
PM   Вверх
ginnie
Дата 4.6.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



nitr, запутать я ничего не хочу. Пример другой, но на эту-же тему. Пишу о тех нюансах (неочевидных вещах), которых в Perl довольно много и все их надо запоминать.
По поводу ссылки на ссылку я все уяснил (надеюсь). Просто раньше нигде в коде не сталкивался с таким.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.