1

私は文字列をすべての単語に$str = 'Hello my friends';入れ、これの可能性のあるさまざまなものを得るために必要な文字列を持っています。\

たとえば、取得しstdoutたい

{H\ello|He\llo|Hel\lo|Hell\o} {m\y} {f\riens|fr\iends|fri\ends.....}

いくつかのコードを書きましたが、次に何をすべきか想像できません:

my $str = 'Hello my friends';
my @ra = split / /, $str;
for(my $i=0; $i < scalar @ra; $i++)
{
    my $word = $ra[$i];
    my $num = length($word);
    my @chars = split("", $word);

    for(my $k = 0, my $l = 1; $l < $num; $k++,$l++)
    {
        print $chars[$k]."\\".$chars[$l];   
    }

}

アイデアはありますか?=\

4

2 に答える 2

2
my $str = 'Hello my friends';
$str =~ s{(\S{2,})}{
    my @alts;
    for my $i (1..length($1)-1) {
        my $slashed = $1;
        substr($slashed, $i, 0, '\\');
        push @alts, $slashed;
    }
    '{' . join('|', @alts) . '}'
}eg;
于 2012-10-27T20:51:27.613 に答える
0

substr指定された部分文字列の代わりとなる新しい文字列を提供する 4 番目のパラメーターを指定できる機能を使用することをお勧めします。そう

my $string = 'ABCD';
substr $string, 2, 0, '\\';

$string等しくなりAB\CDます。

このプログラムは、これを使用して問題の解決策を提供します

use strict;
use warnings;

my $str = 'Hello my friends';

my @words = split ' ', $str;
my @new_words;

foreach my $word (@words) {
  my @list
  for my $i (1 .. length($word) - 1) {
    substr my $new_word = $word, $i, 0, '\\';
    push @list, $new_word;
  }
  push @new_words, join '|', @list;
}

my $new_str = join ' ', map "{$_}", @new_words;

print $new_str;

出力

{H\ello|He\llo|Hel\lo|Hell\o} {m\y} {f\riends|fr\iends|fri\ends|frie\nds|frien\ds|friend\s}
于 2012-10-27T20:50:45.483 に答える