2014-01-30 64 views
1

我從來沒有做過的Perl編程,但我在看下面的Perl代碼,它讓我感到困惑:瞭解一段Perl代碼

sub read_pds 
{ 
    my $bin_s; 
    my $input_pds_file = $_[0]; 
    open(my $fh, '<', $input_pds_file) or die "cannot open file $input_pds_file"; 
    { 
    local $/; 
    $bin_s = <$fh>; 
    } 
    close($fh); 
    return $bin_s; 
} 

我在看上面的代碼,雖然它不會返回任何值,因爲在那裏沒有定義返回類型。

但在底部它返回一個值。現在我怎麼知道什麼是價值的類型,因爲它沒有顯示任何價值,當我使用科莫多添加手錶。

任何想法?

回答

1

獲取傳遞給函數的第一個參數調用:

my $input_pds_file = $_[0]; 

打開文件閱讀:

open(my $fh, '<', $input_pds_file) or die "cannot open file $input_pds_file"; 

設置輸入記錄分隔符爲none(默認爲新行序列:CR或LF或CRLF):

local $/; 

而且讀取整個文件變量:

$bin_s = <$fh>; 

爲什麼閱讀在整個文件一旦?因爲「鑽石操作員」:<>從句柄中讀取數據,直到找到輸入記錄分隔符(上面已清除)。

最後,返回一個大的字符串:

return $bin_s; 
5

Perl並沒有因爲你在想他們,但返回的值是一個字符串(的$input_pds_file內容類型。該<$fh>讀取$fh一行/記錄,因爲$/(輸入記錄分離器)設置爲undef,那將是整個文件

+0

那麼它將返回整個文件,並返回一個字符串?我不確定這個文件的內容是如何看起來的,因爲它具有擴展名.pds,但不應該是Byte []? – TeaLeave

+2

@Califiedicated你稱之爲'Byte []',perl調用一個字符串。 – hobbs

+0

ohk。我很抱歉誤會。 – TeaLeave