这是我的Perl代码
我想知道表达式join '', @{ $imap->top($i) }
use Email::Simple;
use Net::IMAP::Simple::Gmail;
my $server = 'imap.gmail.com';
my $imap = Net::IMAP::Simple::Gmail->new($server);
$imap->login( 'user@gmail.com' => 'user@742' );
my $nm = $imap->select('INBOX');
print "Emails Count == ", $nm;
print "\n";
print "How many emails you wants to read == ";
my $count = <STDIN>;
for (my $i = 1; $i <= $count; $i++ ) {
my $es = Email::Simple->new( join '', @{ $imap->top($i) } );
printf( "[%03d] %s\n\t%s\n", $i, $es->header('From'), $es->header('Subject') );
}
答案 0 :(得分:3)
join '', @{$imap->top($i)}
这是做什么的:
首先我们得到变量$imap
的值。它是一个局部变量(在上面声明为my $imap
),它最好包含一个对象,因为我们将要调用一个方法。 (从技术上讲,它也可以包含类名,但->new
通常会返回一个对象。)
然后我们得到变量$i
的值,它是for
循环中的局部变量(通常那些是for my $i (1 .. $count)
编写的)。我们将其作为参数传递给top
对象上的$imap
方法。
然后(希望)此方法返回对数组的引用,因为我们将要取消引用它。 (从技术上讲,它也可以返回一个操作过载@{}
的对象,但这种可能性较小。)
我们取消引用arrayref,它给了我们一个数组。 join
为此操作提供列表上下文,因此我们将数组的内容作为列表获取。
最后join
获取列表中的值,对它们进行字符串化并连接它们(使用''
作为分隔符,即不使用分隔符)。结果是一个字符串。
答案 1 :(得分:-1)
@BLOCK
与@NAME
相同,但BLOCK必须返回对要使用的数组的引用。
$imap->top($i)
显然返回对数组的引用,在这种情况下@{ $imap->top($i) }
返回该数组的元素。