推理:不能修改非左值子程序

时间:2014-05-06 17:17:46

标签: perl

此代码确实有效。但我的问题是:如果我取消注释两条注释行并注释掉接下来的三行,我会得到一个Can't modify non-lvalue subroutine,我想知道为什么?如果我可以使用注释行,我会保存一个变量并骑... ...

接下来的问题我如何使这更加面向对象?

open FILE, "FBIDs" or die $!;
while (<FILE>) {
     @csv = split /,/; 
}
for (my $i=0;$i<$#csv;$i++) {
     my $browser = LWP::UserAgent->new( );
     my $url = "https://graph.facebook.com/$csv[$i]?fields=id,name\n";
     my $response = $browser->get($url);
#     $response->content=~s/[{}\"]//g;
#     my @json = split (/[,:]/,$response->content);
     my $resp=$response->content;
     $resp=~s/[{}\"]//g;
     my @json = split (/[,:]/,$resp);
     print $json[1],", ",$json[3],"\n";
     $browser->delete( );
}
close FILE;

2 个答案:

答案 0 :(得分:5)

Perl意识到你正在尝试做一些无用的事情 - 修改一个没有存储在任何地方的值 - 所以它会抛出一个错误。请记住,$response->content是方法调用(返回值的东西),而不是变量(存储又称左值)。

答案 1 :(得分:3)

$response->content$response->content()是方法调用,您无法进行替换或更改。

另一方面,可以用这种方式处理一些perl函数,它们被称为lvalue subroutines