【发布时间】:2013-02-26 12:39:27
【问题描述】:
我有以下网址:
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
但是此代码不适合在http:// 部分中带有斜杠的网址,因为它们在不应该的情况下被http:HELLO/ 替换。
如果没有字符串,它也不会在斜杠之后放置HELLO 或GOODBYE,例如http://www.stackoveflow.com/dog/cat/rabbit/hamster/<--SHOULD PUT HELLO AFTER THIS SLASH AS WELL BUT DOSN'T
似乎此代码删除了斜杠,然后重新插入了 FILE2.txt 中的字符串,而不是在正确的开始位置插入 HELLO 和 GOODBYE。
我的问题
是否有更好的方法来实现我需要的输出,或者我可以对现有代码做些什么来解决上述问题?
非常感谢您的帮助,非常感谢
【问题讨论】:
-
你能展示任何你尝试过的方法吗?
-
是
FILE1.txt文件路径中的字符串,还是恰好使用斜杠作为分隔符的字符串? -
@Wooble - 更好地解释和描述了我的问题,希望足以重新打开?谢谢
-
所以它们不是文件路径,现在它们是?在最后的斜线之后你什么都不想要,但现在你想要了吗?现在整个字符串的开头有
http:/,您想保持原样吗?您仍然没有尝试自己解决这个问题,只是复制了我的解决方案(减去基本的use autodie)并要求进一步增强。 这不是礼貌行为,当然也不属于 Stack Overflow。自己努力,遇到特定问题时再回来。 -
@Borodin - 我能解释一下吗,我明白你来自哪里。为了解释我的问题,我的原始问题被高度简化,这就是为什么我最初没有包括 http:/ 和最后的斜杠部分,因为我认为通过了解这一点,我将能够更改我的代码以适应 http :/ 和我自己的最后一个斜线。但是,您的代码和执行方式比我尝试执行的方式要好得多,因此决定改用您的方法,这就是我现在陷入尝试进行 http:/ 和最终斜杠更改的地方,请参阅下一条评论
标签: string perl permutation