gpt4 book ai didi

perl - perl :“//”运算符?

转载 作者:行者123 更新时间:2023-12-03 11:23:25 28 4
gpt4 key购买 nike

我对使用“//”运算符有疑问,我的测试代码如下:

perl -e '@arr1=();@arr2=(1,2,3);@arr3=defined(@arr1)?@arr1:@arr2;print "[@arr3]\n"' 

[1 2 3]

perl -e '@arr1=();@arr2=(1,2,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()?::”相同的结果,而不是使用array(or hash)?

谢谢!!!

最佳答案

因为?:||&&的最左边操作数(或此新分类的//东西)始终在 bool(boolean) 值而不是列表上下文中求值,而其他操作数则继承周围的上下文。

@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;
}

scalar分配给 @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的实现及其定义不同。错误提交。谢谢。

关于perl - perl :“//”运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409157/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com