Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Помогите доработать код с использованием ссылок / 10 сообщений из 10, страница 1 из 1
04.06.2019, 13:17
    #39822263
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Есть такой условный рабочий код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sub recalc_digit($;$)
{
	my $id = shift;
	my $err = shift;
	$$err = 'error';
	return undef;
}
my $err;
my $d = &recalc_digit('900?12345', \$err);
print $d || '#'.$err;


Функция вызывает результат при успешной обработке или текст ошибки в дополнительном аргументе.
Можно ли его сделать условно таким:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
sub recalc_digit($;$)
{
	my $id = shift;
	my $err = shift;
	$err = 'error';
	return undef;
}
my $d = &recalc_digit('900?12345', my $err);
print $d || '#'.$err;


?
...
Рейтинг: 0 / 0
07.06.2019, 09:49
    #39823872
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Alibek B.,


Код: perl
1.
my $d = recalc_digit '900?12345', \(my $err) ;
...
Рейтинг: 0 / 0
07.06.2019, 10:08
    #39823879
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Спасибо, понял.
...
Рейтинг: 0 / 0
07.06.2019, 10:16
    #39823882
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Alibek B.,

или даже так: ( мечта твоя сбылась )


Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
sub recalc_digit($;$)
{
	my $id = shift;
	my $err = \shift;
	$$err = 'error';
	return undef;
}

my $d = recalc_digit '900?12345', my $err ;
...
Рейтинг: 0 / 0
07.06.2019, 10:42
    #39823893
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Alibek B.,

или даже так: ( мечта сбылась ещё раз )

Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sub recalc_digit($;$)
{
	my $id = $_[0];
	local (*ID, *E) = \(@_);
	$E = 'error';
	return undef;
}

my $d = &recalc_digit('900?12345', my $err);
print $d || '#'.$err;
...
Рейтинг: 0 / 0
07.06.2019, 11:19
    #39823913
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
О, это вообще замечательно.
Правда последний вариант выглядит совершенно загадочно.
...
Рейтинг: 0 / 0
07.06.2019, 13:14
    #39824006
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
Alibek B.,

перемудрил я.
эту же идею можно выразить гораздо проще, безо всяких там алиасов на запись таблицы имён пакета.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
sub recalc_digit($;$)
{
   
        $_[1] = "error";
	return undef;
}

my $d = &recalc_digit('900?12345', my $err);
print $d || '#'.$err;
...
Рейтинг: 0 / 0
07.06.2019, 13:50
    #39824021
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
теперь, когда все карты раскрыты,
несложно догадаться, что и эта параноидальная реализация приведёт к желаемому результату:

Код: php
1.
2.
3.
4.
5.
6.
sub recalc_digit($;$)
{
	my $id = shift;
	* _ {ARRAY} [0] = < error >;
	return undef;
}
...
Рейтинг: 0 / 0
07.06.2019, 16:53
    #39824179
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
volodin661my $err = \shift;
Нет, так не работает, пишет: Can't modify single ref constructor in scalar assignment

volodin661$_[1] = "error";
А вот так работает. Но это менее красиво.
...
Рейтинг: 0 / 0
08.06.2019, 00:31
    #39824352
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: Помогите доработать код с использованием ссылок
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Помогите доработать код с использованием ссылок / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]