簡體   English   中英

Perl-數組內容

[英]Perl - an array content

您能解釋一下如何檢查元素是否屬於數組嗎? 我的腳本需要知道元素是否需要擴展名以創建快捷方式並將其復制到另一個目錄。

這是一個例子:

my @array = qw(avi mp4 mov);
my $dir = "E:\Downloads";
opendir (my $dh, $dir);
while (my $file = readdir($dh))
{
    if($file ~= ) 
    instructions...
}

在perlfaq4中有一個解決方案,該節“如何確定某個元素是否包含在列表或數組中?” 此處: http : //perldoc.perl.org/perlfaq4.html#How-can-I-tell-whether-a-certain-element-is-contained-in-a-list-or-array嗎?

如果您使用的是Perl 5.10或更高版本,則解決方案是:

if( $item ~~ @array ) {
    say "The array contains $item"
}

如果您的Perl較舊,請查看鏈接。 還有其他可能性。

關於您的任務:如果您只想在文件夾中搜索具有特定擴展名的文件,我建議您使用File :: Find :: Rule

# find all the .pm files in @INC
my @files = File::Find::Rule->file()
                        ->name( qr/\.(?:avi|mp4|mov)$/ )
                        ->in( $dir );

您可以使用grep一次遍歷一個數組,查看是否匹配:

if ( grep $file ~= /\Q.$_\z/, @array ) {

或將數組元素連接到單個正則表達式中:

my @array = qw(avi mp4 mov);
my $selected_extensions = qr/^\.(?:@{[ join '|', map quotemeta, sort @array ]})\z/;
my $dir = "E:\Downloads";
opendir (my $dh, $dir);
while (my $file = readdir($dh))
{
    if($file ~= $selected_extensions) 
    instructions...
}

您可以寫

while ( my $file = glob 'E:\Downloads\*.{avi,mp4,mov}' ) {
    # Process $file
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM