Заменить {x} на param в строке
Я хочу заменить {x}, где x - это число от 1 до 10, на строку из массива. Массив заполняется разделением строки пробелами.
Я собрал некоторый код, но регулярное выражение, вероятно, неправильно.
my @params = split(' ', "Paramtest: {0} {1} {2}");
my $count = @params;
for (my $i = 0; $i <= $count; $i++) {
my $param = @params->[$i];
$cmd_data =~ s/{"$i"}/"$param"/;
if(!$cmd_data) {
$server->command(sprintf("msg $target %s incorrect syntax for %s.", $nick, "!params p1 p2 p3"));
return;
}
}
$server->command(sprintf("msg $target %s.", $cmd_data));
Обновить
Я попытался использовать приведенный ниже код в качестве модифицированной версии Миллера (первый ответ)
my @params = split(' ', "!fruit oranges apples");
my $cmd_data = "Fruits: {0} {1}";
$cmd_data =~ s{\{(\d+)\}}{
$params[$1] // die "Not found $1" #line 160
}eg;
$server->command(sprintf("msg $target %s.", $cmd_data));
Выход
Not found 1 at myscript.pl line 160.
1 ответ
Решение
Возможно, более общий поиск и замена помогут вам лучше:
use strict;
use warnings;
my @params = qw(zero one two three four five six seven eight);
my $string = 'My String: {0} {1} {2}';
$string =~ s{\{(\d+)\}}{
$params[$1] // die "Not found $1"
}eg;
print $string;
Выходы:
My String: zero one two