【发布时间】:2021-01-26 04:24:25
【问题描述】:
我正在尝试删除出现在输出数组的许多(但不是全部)变量中的 .png 文件扩展名。显示扩展名的数组变量这样做是因为它们不是从“Genus_species#.png”格式的文件名生成的,其中“#”是一个数字。相反,它们是从“Genus_species.png”格式的未编号文件名生成的。我相信这行代码造成了这个问题:“$genus = $file =~ s/\d.png$//r;”。我该如何解决这个问题?请指教。
这是我的 Perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use English; ## use names rather than symbols for special varables
my $dir = '/Users/jdm/Desktop/xampp/htdocs/cnc/images/plants';
opendir my $dfh, $dir or die "Can't open $dir: $OS_ERROR";
my %genus_species; ## store matching entries in a hash
for my $file (readdir $dfh)
{
next unless $file =~ /.png$/; ## entry must have .png extension
my $genus = $file =~ s/\d\.png$//r;
push(@{$genus_species{$genus}}, $file); ## push to array,the @{} is to cast the single entry to a referance to an list
}
for my $genus (keys %genus_species)
{
print "$genus = ";
print "$_, " for sort @{$genus_species{$genus}}; # sort and loop though entries in list referance
print "\n";
}
这是输出的数组:
Euonymus_fortunei = Euonymus_fortunei1.png, Euonymus_fortunei2.png, Euonymus_fortunei3.png,
Polygonum_persicaria = Polygonum_persicaria1.png, Polygonum_persicaria2.png,
Polygonum_cuspidatum.png = Polygonum_cuspidatum.png,
请注意,变量“Polygonum_cuspidatum.png”无意中包含了文件扩展名,因为该变量是从名称中缺少数字的文件生成的。具体来说,这个变量应该是:
Polygonum_cuspidatum = Polygonum_cuspidatum.png
再次,请告知如何解决此问题。谢谢。
【问题讨论】: