2014-01-30 65 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