您好我想知道是否有人知道如何使用perl来移动网址,但只知道&
之后的所有参数。
这是一个例子:
anyurl=i&ct=1&cad=1&rsm=6&ei=JthyULClH8fH0QWcooD4Bw&zx=1349703728841
这就是我要找的东西:
anyurl=i&ei=JthyULClH8fH0QWcooD4Bw&cad=1&ct=1&rsm=6&zx=1349703728841
只是让所有参数背后的&随机放在不同的地方。所以我希望每个印刷品在&
后面的所有参数都在不同的地方,这可能吗?
答案 0 :(得分:2)
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw(shuffle);
my $url = 'http://www.anyurl.com/userdata?ct=1&cad=1&rsm=6&ei=JthyULClH8fH0QWcooD4Bw&zx=1349703728841';
my @parts = split(/\?/,$url);
my $parms = join('&',shuffle(split(/&/,$parts[1])));
my $shuffled = join('?',$parts[0],$parms);
print $shuffled;
可以更短,但这是如何做到这一步的一步一步的想法。
答案 1 :(得分:1)
尝试将查询字符串转换为数组,然后对数组进行混洗:
my $qryStr = 'ct=1&cad=1&rsm=6&ei=JthyULClH8fH0QWcooD4Bw&zx=1349703728841';
my @init = split('&', $qryStr);
my $i = @init;
my @shfld;
while($i--)
{
my $j = int(rand($i+1));
$shfld[$i] = $init[$j];
splice(@init, $j, 1);
}
my $rslt = join('&', @shfld);
print "\nRESULT = ".$rslt;