|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 23 Jan 2002 19:30:19 To : Artem Chuprina Subject : Re: interpolation --------------------------------------------------------------------------------
Artem Chuprina wrote:
> Здравствуй, Juri Milodanovic.
>
> JM> Как лучше преобразовать неинтерполируемую переменную в интерполируемую?
> JM> Пока делаю так:
>
> JM> $str = 'Hello.\n\n\n';
> JM> print $str;
> JM> # prints: Hello.\n\n\n
>
> JM> $str = eval "qq/$str/";
> JM> print $str;
> JM> # prints: Hello.
> JM> #
> JM> #
>
> JM> А какие-нибудь другие способы есть?
>
> Более прямых - точно нету. Собственно, по одной причине - интерполируемых
> переменных в perl не бывает. Бывают интерполируемые строковые константы. Что
> совсем не одно и то же.
Вышеприведеный способ (eval "qq/$str/") поломается если в $str встретится /,
та же история может быть и с другим разделителем. Выход - заквотить
встретившийся разделитеть:
my $a = 'aaaa';
my $str = 'Hello / $a @{[ 1 / 2 ]}';
$str =~ s/\//\\\//g;
$str = eval "qq/$str/";
теперь $str содержит "Hello / aaaa 0.5"
Андрей
P.S. Если вам где-либо пришлось использовать подобный код, с
вероятностью 99.9% вы недопонимаете как правильно, эффективно и
акуратно решать задачи в Perl. И лучшим решением будет пересмотреть
сам подход к проблеме.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/5284cf62e8a4.html, оценка из 5, голосов 10
|