[спасибо, помогли] Вопрос к знающим Perl

mazamaza2008

Есть строка вида "{1,2,3,4,5}"
Как ее преобразовать в массив @a : @a[0] = 1, @a[1] = 2, ... ?
То есть надо убрать символы "{" и "}", а потом список чисел через запятую как-то преобразовать в массив. Я подозреваю, что в перле это можно как-то очень легко сделать, но не могу найти.
Надо очень срочно сделать, к сожалению некогда разбираться Я в перле пока полный ноль...
Спасибо!

uncle17


$text =~ s/^.*?\{//is;
$text =~ s/\}.*$//is;

my @array = split(",", $text);

Хотя я тоже в перле не очень и это вполне себе индийский код

mazamaza2008

$text =~ s/^.*?{//is; $text =~ s/}.*$//is; my @array = split(",", $text

спасибо

uncle17

я чуть подправил - сначала скобки не заслешил

Elina74

можно так
$a = "{3,4,5,6,7}";
if($a =~ /\{(.*?)\}/){
$a = $1;
print $a, "\n";
@a = split(/\,/, $a);
}
else{
@a = ;
}
foreach(@a){
print;
print "\n";
}

mazamaza2008

Спасибо!

uncle17

$a =~ /\{(.*?)\}/ ;
$a = $1;
я ж говорю - у меня код индийский

Elina74

$a =~ /\{(.*?)\}/ ;
$a = $1;
Я не против.
А если строка не соотв. твоему шаблону?

uncle17

такого в условии не было

sakura

А можно вот так вот в одну строчку:
@arr = map{s/[\{\}]//g;$_}split(/,/, "{3,4,5,6,7}");

sakura

foreach(@a){
print;
print "\n";
}
Это тоже в одну строчку пишется:
print join "\n", @a; 

sakura

if($a =~ /\{(.*?)\}/){
$a = $1;
print $a, "\n";
@a = split(/\,/, $a);
}
else{
@a = ;
}
И это пишется в одну строку:
@a = ($a =~ /\{(.*?)\}/) ? split(/,/, $1) : ; 

sakura

$a = "{3,4,5,6,7}";
if($a =~ /\{(.*?)\}/){
$a = $1;
print $a, "\n";
@a = split(/\,/, $a);
}
else{
@a = ;
}
foreach(@a){
print;
print "\n";
}
Итого, твоя программа превращается в 3 строчки:
$a = "{3,4,5,6,7}";
@a = ($a =~ /\{(.*?)\}/) ? split(/,/, $1) : ;
print join "\n", @a;
Оставить комментарий
Имя или ник:
Комментарий: