1

你好我想知道是否有人知道如何用 perl 洗牌一个 url,但只有&.

这是一个例子:

anyurl=i&ct=1&cad=1&rsm=6&ei=JthyULClH8fH0QWcooD4Bw&zx=1349703728841

这就是我要找的东西:

anyurl=i&ei=JthyULClH8fH0QWcooD4Bw&cad=1&ct=1&rsm=6&zx=1349703728841

只是为了让 & 后面的所有参数随机放置在不同的位置。所以我希望&每次打印后的所有参数都在不同的位置,这可能吗?

提前谢谢。

4

2 回答 2

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;

可以更短,但这是如何做到这一点的一步一步的想法。

于 2012-10-08T14:22:08.430 回答
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;
于 2012-10-08T15:10:21.333 回答