2

我有一个 Perl 的 URL 数组,它们都包含“http://”。我想从每个字符串中删除该字符串,只留下域。我正在使用以下for循环:

#!/usr/bin/perl

### Load a test array
my @test_array = qw (http://example.com http://example.net http://example.org);

### Do the removal
for (my $i=0; $i<=$#test_array; $i++) {
    ($test_array[$i] = $test_array[$i]) =~ s{http://}{};
}

### Show the updates
print join(" ", @test_array);

### Output: 
### example.com example.net example.org

它工作正常,但我想知道是否有更有效的方法(无论是在处理方面还是在减少打字方面)。有没有更好的方法从字符串数组中删除给定的字符串?

4

3 回答 3

6

当我解析 uris 时,我使用URI

use URI qw( );
my @urls = qw( http://example.com:80/ ... );
my @hosts = map { URI->new($_)->host } @urls;
print "@hosts\n";
于 2012-12-05T00:00:10.527 回答
5

您不需要此行中的分配:

($test_array[$i] = $test_array[$i]) =~ s{http://}{};

你可以使用:

$test_array[$i] =~ s{http://}{};

为了减少打字,利用$_变量:

for (@test_array) {
  s{http://}{};
}
于 2012-12-04T23:49:54.150 回答
0

我建议使用该map功能。它将动作应用于数组中的每个元素。您可以将 for 循环压缩为一行:

map s{http://}{}, @test_array;

另外,作为旁注,以空格分隔的格式打印数组内容的更简单方法是将数组简单地放在双引号字符串中:

print "@test_array";
于 2012-12-04T23:54:51.173 回答