shuffle url参数背后&在Perl

时间:2012-10-08 14:10:38

标签: perl shuffle

您好我想知道是否有人知道如何使用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

只是让所有参数背后的&随机放在不同的地方。所以我希望每个印刷品在&后面的所有参数都在不同的地方,这可能吗?

提前thnx。

2 个答案:

答案 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;