$ perl -e 'my @F=split //, shift;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"' A2B3C4
AABBBCCCC
Это разделяет ввод таким образом, что каждый отдельный символ становится элементом массива(@F
). Затем, используя оператор умножения строк Perl (x
), он печатает каждый элемент с четным -номером (, начиная с 0 ), число раз, равное следующему элементу с нечетным -номером.
или если вы хотите, чтобы он принимал ввод из стандартного ввода, а не из командной строки:
$ echo $'A2B3C4\nE5F2G7' | perl -ne 'my @F=split //;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"'
AABBBCCCC
EEEEEFFGGGGGGG
У обеих этих реализаций есть недостаток, заключающийся в том, что они допускают только строки из одной -цифры и подсчеты из одной -цифры.
Следующее снимает это ограничение:
$ echo A12B3CZ4 | perl -ne '
# insert a space between numbers and alphabetic characters.
s/([[:alpha:]])(\d)/$1 $2/g;
s/(\d)([[:alpha:]])/$1 $2/g;
# split on spaces
@F = split / /;
for my $i (0..@F) { print $F[$i] x $F[++$i]};
print "\n"'
AAAAAAAAAAAABBBCZCZCZCZ