2012年11月1日星期四

Re: [PerlChina] =()= 的使用

Hi,

做了个小实验, 明白了一些事情,拿来分享。
Q1:
> 书中说,split 函数返回结果有多少个元素可以用下面的方法
>   my $count = ( ) = split /:/, $line;
>  但是我测试,发现$count的值只是为1

my $line = "this:is:test:line:for:split.";
my $cnt =  () = (split /:/, $line);
返回值为1,

这里的奥妙在split这里,
split这个函数,需要别人告诉它,分割数是多少(就是它要返回多少个数值)。
但是()代表空list, 
() = (split /:/, $line)这种情况下,split不清楚分割数是多少。
我猜测它在这里返回的是个布尔值的结果。

接着,
my $cnt = () = (split /:/, $line, -1);
返回值为6,
这里添加的-1, 明确告诉split, 最大分割数是无限,
所以这时侯split把数组返回来了。

Q2,
>书上还有一个例子,如书所说返回。
>     my $elements = ( ) = localtime;
这里结果是9,
localtime返回日期内容的数组,什么年月日的都在里面。
看一下它的说明就知道了。

localtime返回的数组,首先被()这个空列表捕获,
因为$elements = ( ) 这个表达式,代表sclar context,
这样,数组的数量,就赋给了$elements。

以上,
希望我得解释容易理解,能对大家有所帮助。
呵呵。

2012/10/27 Robin Lee <robinlee.sysu@gmail.com>
没用过这种表达方式

my $count = split /:/, $line;
不就可以了吗?

如果要强制使用 List Context,应该推荐这样写:
my $elements = @{[localtime]};


2012/10/26 x2x4 <x2x4com@gmail.com>
Hi 各位
    最近在看Perl高效编程,其中的=()=让我疑惑

    书中说,split 函数返回结果有多少个元素可以用下面的方法
    my $count = ( ) = split /:/, $line;

    但是我测试,发现$count的值只是为1

    my $line = "this:is:test:line:for:split.";
    my $count = ( ) = split /:/, $line;
    print "split = $count\n";

    如果换成
    my $count = my @test = split /:/, $line;
    返回为6

    书上还有一个例子,如书所说返回。
     my $elements = ( ) = localtime;

     疑惑,求解。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。


--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
+++++++_++++++++
李 鎮
株式会社ディー・エヌ・エー
ソーシャルプラットフォーム事業本部 システム部

〒150-8510
東京都渋谷区渋谷2丁目21番1号渋谷ヒカリエ
Shibuya Hikarie 2-21-1, Shibuya, Shibuya-ku, Tokyo 150-8510
++++++ *-* +++++++

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: