powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: Помогите доработать код с использованием ссылок
10 сообщений из 10, страница 1 из 1
Perl: Помогите доработать код с использованием ссылок
    #39822263
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой условный рабочий код:
Код: 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
Perl: Помогите доработать код с использованием ссылок
    #39823872
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,


Код: perl
1.
my $d = recalc_digit '900?12345', \(my $err) ;
...
Рейтинг: 0 / 0
Perl: Помогите доработать код с использованием ссылок
    #39823879
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, понял.
...
Рейтинг: 0 / 0
Perl: Помогите доработать код с использованием ссылок
    #39823882
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Perl: Помогите доработать код с использованием ссылок
    #39823893
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Perl: Помогите доработать код с использованием ссылок
    #39823913
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, это вообще замечательно.
Правда последний вариант выглядит совершенно загадочно.
...
Рейтинг: 0 / 0
Perl: Помогите доработать код с использованием ссылок
    #39824006
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Perl: Помогите доработать код с использованием ссылок
    #39824021
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь, когда все карты раскрыты,
несложно догадаться, что и эта параноидальная реализация приведёт к желаемому результату:

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

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


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