加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl:“//”运算符

发布时间:2020-12-15 21:22:07 所属栏目:大数据 来源:网络整理
导读:我有一个关于使用“//”操作符的问题,我的测试代码如下: perl -e '@arr1=();@arr2=(1,2,3);@arr3=defined(@arr1)?@arr1:@arr2;print "[@arr3]n"' [1 2 3] perl -e '@arr1=();@arr2=(1,3);@arr3=@arr1//@arr2;print "[@arr3]n"' [0] perl -e '$v1=();$v2=
我有一个关于使用“//”操作符的问题,我的测试代码如下:
perl -e '@arr1=();@arr2=(1,2,3);@arr3=defined(@arr1)?@arr1:@arr2;print "[@arr3]n"' 

[1 2 3] 

perl -e '@arr1=();@arr2=(1,3);@arr3=@arr1//@arr2;print "[@arr3]n"' 

[0] 

perl -e '$v1=();$v2="123";$v3=defined($v1)?$v1:$v2;print "[$v3]n"' 

[123] 

perl -e '$v1=();$v2="123";$v3=$v1//$v2;print "[$v3]n"' 

[123]

我的问题是,为什么使用“//”运算符与在标量上使用“defined()?:”相同的结果,而不是数组(或散列)?

谢谢!!!

解决方法

因为?的最左边的操作数,||或者&&& – 或这个newfanglulated // thingie – 总是在布尔不是列表上下文中进行求值,而其他操作数则会继承周围的上下文。
@a = @b && @c;

手段

if (@b) {
     @a = @c;
} else {
     @a = scalar @b;
}

@a = @b || @c;

并且

@a = @b // @c;

都意味着

手段

if (@b) {
     @a = scalar @b;
} else {
     @a = @c;
}

将@b分配给@a的唯一方法是使用?:

@a = @b ? @b : @c;

这当然意味着什么

if (@b) {
    @a = @b;
} else {
    @a = @c;
}

还有属性?:可以是一个左值:

(@a > @b ? @a : @b) = @c;

这当然意味着什么

if (@a > @b) {
    @a = @c;
} else {
    @b = @c;
}

编辑

@a // @b及其定义的实现有所不同。提交错误谢谢。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读