LINUX.ORG.RU

eval - это же очевидно.

Deleted
()

очевидно

anonymous
()

1.

# $var1 - должна быть глобальной
our $var1 = undef; 
my $abc = 'var1';
$var1 = "HELLO WORLD";
{
 no strict 'refs';
 print ${$abc};
}
2.
my $var1 = undef;
my $abc = '$var1';
$var1 = "HELLO WORLD";
print eval $abc;

anonymous
()
Ответ на: комментарий от anonymous

На практике это лучше использовать редко.

OxiD ★★★★
()
Ответ на: комментарий от anonymous

1. Выводит $var1

2.Не катит т.к. если $abc = '$var1 and sky'; оно упадет. Да и не хотелось бы чтобы ф-и из него выполнялись.

Смысл в том что из файла приходит шаблон поиска и то на что надо заменить с $1, $2..$n

kote
() автор топика
Ответ на: комментарий от kote

В принципе отрабатывает такая конструкция:

eval "\$string =~ s/$pattern/$replaceTo/" 
но слишком тормазит

kote
() автор топика
Ответ на: комментарий от kote

не прокатит

что не прокатит?

my $b = «$1 world»;

my $b = '$1 world';

Одинарные кавычки для шаблона, без подстановки текущего значения «$1»:

my $var1 = $1;

а чему у тебя равно значение $1 ?

$string =~ s/$a/$var1/;

$string =~ s/\$a/$var1/;

'$' - специальный символ и в шаблоне означает конец строки, должен экранироваться: \$

Neksys ★★★
()
Ответ на: комментарий от kote

Кажется понял твою проблему: ты неудачно выбрал символ обозначения подстановки в шаблоне. Используя $ ты постоянно будешь играть с контекстами его текущей роли и уровнями экранирования. Меняй $1 на #1 (например):

$string = "#1, мы Вам рады! \nДля Вас, #1, мы сделаем специальные персональные скидки!";
$pattern = "#1";
$replaceTo = "Даниил Мифодьевич";

$string =~ s/$pattern/$replaceTo/ge;
print $string;
  
Даниил Мифодьевич, мы Вам рады! 
Для Вас, Даниил Мифодьевич, мы сделаем специальные персональные скидки!

Neksys ★★★
()
Ответ на: комментарий от Neksys

$string =~ s/\$a/$var1/;

это я тебе неправильно написал '\$a' просто превращает ссылку на переменную $a в текст '$a', тебе это тут не надо.

'$' - специальный символ и в шаблоне означает конец строки, должен экранироваться: \$

...обрывок мыслей про $ и конец строки - тоже ни к селу ни к городу. извини, отвлёкся немного :)

my $a = '(x*z)';
my $string = "yxxzd";
my $b = '$1 world';
$string =~ /$a/;
my $var1 = '-!-';
$b=~ s/\$1/$var1/;
$string =~ s/$a/$var1/;
print $b,"\t\t",$string

-!- world		y-!-d
Neksys ★★★
()
Ответ на: комментарий от Neksys

все равно не то:) Под $1, $2, ..$n подразумевается спец переменная перла в которую попадает часть строки захваченная шаблоном из скобок

kote
() автор топика
Ответ на: комментарий от arsi

eval тормозит дико

my $string = "xaabbc";
my $pat = "(a+b+)";
my $to = "$1 hello";
eval "\$string =~ s/$pat/$to/";
Выполняется в 10 раз медленнее, чем это :
my $string = "xaabbc";
$string =~ s/(a+b+)/$1 hello/;

kote
() автор топика
Ответ на: комментарий от kote

а что ты хотел? в первом случае происходит компиляция перл-кода и его выполнение, во втором — замена подстроки. это уже тебе решать, что выбрать, исходя из твоих задач.

arsi ★★★★★
()
Ответ на: комментарий от kote

продолжим.

3.

use strict;
use warnings;
my $var1 = undef;
my $var2 = undef;
my $abc = '$var1 and sky and $var2'; 
$var1 = "HELLO WORLD";
$var2 = "GOODBYE WORLD";
# ee Evaluate the right side as a string then eval the result.
$abc =~ s/(\$\w+)/$1/eeg;
print $abc; #выводит HELLO WORLD and sky and GOODBYE WORLD

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.