2017-05-25 51 views
0

所以我對Perl很陌生,試圖簡單地打開一個目錄並列出它的所有文件。當我在下面試圖在/ usr/bin中打印所有文件時運行這個非常簡單的代碼時,它將無法工作,無論我嘗試什麼,我總是被告知'無法打開/ usr/bin:沒有這樣的文件或目錄'。在Perl中打印一個目錄中的所有文件 - 將不起作用

任何幫助將不勝感激!

#!/usr/bin/perl 

$indir = "/usr/bin"; 

# read in all files from the directory 
opendir (DIR, @indir) or die "Could not open $indir: $!\n"; 
while ($filename = readdir(DIR)) { 
    print "$filename\n"; 
} 
closedir(DIR); 
+1

'@ indir'應該是'$ indir'。 – Barmar

+0

@Barmar你是英雄我不敢相信那是我的錯誤! –

+9

@RyanSaffer:Perl會告訴你這樣的愚蠢錯誤。總是在代碼中添加'use strict'和'use warnings'。 –

回答

4

這裏是哪裏的use strict;use warnings;非常基本的故障排除步驟已經省略了另一個地方,它會告訴你什麼是錯的。

Global symbol "@indir" requires explicit package name (did you forget to declare "my @indir"?) 

當然,你也不得不解決一些其他錯誤(例如my $indir = '/usr/bin';

我也建議READDIR是不適合這個工作,而且往往會推薦glob

#!/usr/bin/env perl 
use strict; 
use warnings; 

my $indir = "/usr/bin"; 

# read in all files from the directory 
foreach my $filename (glob "$indir/*") { 
    print "$filename\n"; 
} 

注意這是如何的不同 - 它打印完整的文件路徑,並且它忽略了某些事情(如...),這是在我看來,更一般有用。尤其是因爲另一個真正常見的錯誤是open my $fh, '<', $filename or die $!,忘記它不在當前工作目錄中。

+0

謝謝!這是我的第一個perl程序,所以對我來說一切都是新的 –

相關問題