如何从Perl中返回文件句柄的方法中读取?

时间:2010-04-20 02:37:20

标签: perl syntax filehandle

我有一个带有返回文件句柄的方法的对象,我想从该句柄中读取。以下方法不起作用,因为方法调用的右尖括号被解释为输入阅读器的结束尖括号:

my $input = <$object->get_handle()>;

将其解析为:

my $input = ( < $object- > ) get_handle() >;

这显然是语法错误。有什么方法可以在角度运算符中执行方法调用,还是需要将它分成两个这样的步骤?

my $handle = $object->get_handle();
my $input = <$handle>;

4 个答案:

答案 0 :(得分:7)

您可以考虑将< ... >拼写为readline( ... {{1相反,它通过使用一个很好的常规语法而不是一个特殊情况来避免这个问题。或者你可以将它分配给标量。你的选择。

答案 1 :(得分:3)

你必须分手; &lt;&gt; operator需要一个类型为&lt; STDIN&gt;的类型符号,一个简单的标量变量,包含对文件句柄或类型的引用,如&lt; $ fh&gt;,或者像<&lt; * .c&gt;的glob()函数的参数。在您的示例中,您实际上正在调用glob('$ object-')。

&LT;&GT;实际上被解释为对readline()的调用,所以如果你真的想要,你可以说my $input = readline( $object->get_handle() );我不确定它是否更干净,特别是如果你不止一次从句柄中读取。 / p>

有关详细信息,请参阅http://perldoc.perl.org/perlop.html#I%2fO-Operators

答案 2 :(得分:1)

my $input = readline($object->get_handle());

use IO::Handle;

my $input = $object->get_handle()->getline();

答案 3 :(得分:0)

您将无法在此处使用<...>运算符来阅读文件句柄,因为比<bareword><$scalar>更复杂的内容被解释为glob(...)打电话,所以通常的消歧技巧都不会在这里奏效。 <HANDLE>运算符是readline HANDLE的语法糖,因此您可以这样写:

my $input = readline $object->get_handle;

但是,如果您将在循环中执行此操作,则在标量中缓存句柄会更有效。然后<...>运算符将按预期工作:

my $handle = $object->get_handle;
while (my $input = <$handle>) {
    ...
}