Perl 语言中的关于 !=与 ne 在程序中的问题

sc0or 2008-10-30 07:01:26
sub total{
my $count;
if (@_ != undef) { #when use NE to replace !=, you will got the different result, why ?
foreach (@_) {
$count += $_;
}
$count;
} else {
0;
}
}
my $sum1 = &total();
print $sum1;
我的问题就是,当我分别用 ne 和 != 时,程序会输出不同的结果。
当你用 !=,程序会按照我的意思在屏幕上输出 0。
当你用 ne,程序会输出到屏幕上是空(没结果),我希望是输出0。为什么啊?我刚刚学习Perl。

第二:

sub total{
my $count;
if (@_ != undef) {
foreach (@_) {
$count += $_;
}
$count;
} else {
print "The number is undef or none" #为什么我这样写会编译不过去?
0;
}
}
my $sum1 = &total();
我希望是先输出这句话The number is undef or none,然后返回 0 给sum1
...全文
1300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sc0or 2008-11-24
  • 打赏
  • 举报
回复
iambic,谢谢你的回复。
对于一个刚开始学perl的人,这个上下文关系,还有更种自由的简写,真的是得一步步掌握啊。

if(@_)这个应该不会造成歧义了,我指我跟perl之间的歧义,perl可能一直都是按照正确的思维运行的。
想不到 !=ne 竟然也有上下文的区别。

如果你还会来看这个帖子,能否告诉我如何进行断点调试程序。或者说根本不可以。
iambic 2008-10-31
  • 打赏
  • 举报
回复
另外,判断列表为空,最好直接用 if (@_)。
iambic 2008-10-31
  • 打赏
  • 举报
回复
一、

!=是数值比较,使用时会把左右操作数都转化为数字。这里@_(空列表)和undef都转换成0了,所以比较结果就是相等。

二、

忘加分号了吧。
sc0or 2008-10-31
  • 打赏
  • 举报
回复
自己顶,期待高手来
sc0or 2008-10-30
  • 打赏
  • 举报
回复
这问题很难么,都没人回答?还是太简单

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧