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

& の後ろのすべてのパラメータが別の場所にランダムに配置されるようにします。だから私&は印刷ごとに異​​なる場所の背後にあるすべてのパラメータが欲しいのですが、これは可能ですか?

事前にt​​hnx。

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 に答える