私は次のコードを持っています:
#!usr/bin/perl
use strict;
use warnings;
use URI qw( );
my @insert_words = qw( HELLO );
my $newURLs;
while ( my $baseURL = <DATA>) {
chomp $baseURL;
my $url = URI->new($baseURL);
my $path = $url->path();
for (@insert_words) {
# Use package vars to communicate with /(?{})/ blocks.
local our $insert_word = $_;
local our @paths;
$path =~ m{
^(.*[/])([^/]*)((?:[/].*)?)\z
(?{
push @paths, "$1$insert_word$2$3";
if (length($2)) {
push @paths, "$1$insert_word$3";
push @paths, "$1$2$insert_word$3";
}
})
(?!)
}x;
for (@paths) {
$url->path($_);
print "$url\n"; #THIS PRINTS THE CORRECT URLS I WANT IN THE ARRAY REF
push( @{ $newURLs->{$baseURL} }, $url ); #TO PUT EACH URL INTO AN ARRAYREF BUT ITS NOT WORKING
}
}
}
print "\n"; #for testing only
print Dumper($newURLs); #for testing only
print "\n"; #for testing only
__DATA__
http://www.stackoverflow.com/dog/cat/rabbit/
http://www.superuser.co.uk/dog/cat/rabbit/hamster/
http://10.15.16.17/dog/cat/rabbit/
私が抱えている問題:
上記のコードに示されているように実行するprint "$url\n";
と、配列refに入れたい正しいURLが出力されますが、実行するpush( @{ $newURLs->{$baseURL} }, $url );
と、データ構造に次のようになります。
$VAR1 = {
'http://www.stackoverflow.com/dog/cat/rabbit/' => [
bless( do{\(my $o = 'http://www.stackoverflow.com/dogHELLO/cat/rabbit/')}, 'URI::http' ),
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0],
$VAR1->{'http://www.stackoverflow.com/dog/cat/rabbit/'}[0]
],
私が得るべきものは次のとおりです
$VAR1 = {
'http://www.stackoverflow.com/dog/cat/rabbit/' => [
http://www.stackoverflow.com/dog/cat/rabbit/HELLO
http://www.stackoverflow.com/dog/cat/HELLOrabbit/
http://www.stackoverflow.com/dog/cat/HELLO/
http://www.stackoverflow.com/dog/cat/rabbitHELLO/
http://www.stackoverflow.com/dog/HELLOcat/rabbit/
http://www.stackoverflow.com/dog/HELLO/rabbit/
http://www.stackoverflow.com/dog/catHELLO/rabbit/
http://www.stackoverflow.com/HELLOdog/cat/rabbit/
http://www.stackoverflow.com/HELLO/cat/rabbit/
http://www.stackoverflow.com/dogHELLO/cat/rabbit/
],
私が見落としている、または間違っていることは明らかですか?これに関するあなたの助けは大いに感謝されるでしょう、多くの感謝