私は次のURLを持っています:
FILE1.txt
http://www.stackoveflow.com/dog/cat/rabbit/hamster/
192.168.192.168/lion/tiger/elephant/
FILE2.txt
HELLO
GOODBYE
私が達成しようとしている出力:
http://www.stackoveflow.com/dogHELLO/cat/rabbit/hamster/
http://www.stackoveflow.com/dog/catHELLO/rabbit/hamster/
http://www.stackoveflow.com/dog/cat/rabbitHELLO/hamster/
http://www.stackoveflow.com/dog/cat/rabbit/hamsterHELLO/
http://www.stackoveflow.com/dog/cat/rabbit/hamster/HELLO
http://www.stackoveflow.com/dogGOODBYE/cat/rabbit/hamster/
http://www.stackoveflow.com/dog/catGOODBYE/rabbit/hamster/
http://www.stackoveflow.com/dog/cat/rabbitGOODBYE/hamster/
http://www.stackoveflow.com/dog/cat/rabbit/hamsterGOODBYE/
http://www.stackoveflow.com/dog/cat/rabbit/hamster/GOODBYE
192.168.192.168/lionHELLO/tiger/elephant/
192.168.192.168/lion/tigerHELLO/elephant/
192.168.192.168/lion/tiger/elephantHELLO/
192.168.192.168/lion/tiger/elephant/HELLO
192.168.192.168/lionGOODBYE/tiger/elephant/
192.168.192.168/lion/tigerGOODBYE/elephant/
192.168.192.168/lion/tiger/elephantGOODBYE/
192.168.192.168/lion/tiger/elephant/GOODBYE
ご覧のとおり、文字列はすべてのスラッシュの後HELLO
にGOODBYE
挿入されます。スラッシュの後にすでに文字列がある場合は、その後に文字列が追加されますHELLO
(GOODBYE
例http://www.stackoveflow.com/dogHELLO/cat/rabbit/hamster/
など)。
私が試したこと
use strict;
use warnings;
my @f1 = do {
open my $fh, '<', 'FILE1.txt';
<$fh>;
};
chomp @f1;
my @f2 = do {
open my $fh, '<', 'FILE2.txt';
<$fh>;
};
chomp @f2;
for my $f1 (@f1) {
my @fields = $f1 =~ m{[^/]+}g;
for my $f2 (@f2) {
for my $i (0 .. $#fields) {
my @new = @fields;
$new[$i] .= $f2;
print qq{/$_/\n}, for join '/', @new;
}
print "\n\n";
}
}
#courtesy of Borodin
ただし、このコードは、部分にスラッシュが含まれているURLには対応していません。これは、これらが必要のないときにhttp://
置き換えられるためです。http:HELLO/
また、文字列がまだ存在しない場合は、スラッシュを入れたり、スラッシュの後に入れHELLO
たりしません。GOODBYE
http://www.stackoveflow.com/dog/cat/rabbit/hamster/<--SHOULD PUT HELLO AFTER THIS SLASH AS WELL BUT DOSN'T
このコードは、最初から正しい場所に挿入するのHELLO
ではなく、FILE2.txtの文字列を含むスラッシュを削除してから再挿入するようです。GOODBYE
私の質問
必要な出力を達成するためのより良い方法はありますか、それとも上記の問題に対応するために既存のコードにできることがありますか?
あなたの助けは大いに感謝されます、多くの感謝