我找到了一些我需要的Perl代码的例子,但它有一些我无法识别的内容.
my $i //= '08';
Run Code Online (Sandbox Code Playgroud)
我在任何地方都找不到任何参考!它看起来像是:
my $i = '08';
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Jon*_*ler 52
该//=操作符是赋值运算符的版本//或"逻辑定义-或"运算符.
在一个的上下文my变量声明,变量最初未定义所以它是等效于分配(和将被更好地写成my $i = '08';).但总的来说,
$i //= '08';
Run Code Online (Sandbox Code Playgroud)
是一个简写:
$i = (defined $i) ? $i : '08';
Run Code Online (Sandbox Code Playgroud)
它在Perl运算符(perldoc perlop)中记录在两个地方(简洁地在赋值运算符部分下面,并在"逻辑定义 - 或"部分中完整记录).它是在Perl 5.10.0中添加的.
简短的回答:它是一样的my $i = '08';.
首先,我们来看看 $i //= '08';
EXPR1 //= EXPR2;
Run Code Online (Sandbox Code Playgroud)
是相同的
EXPR1 = EXPR1 // EXPR2;
Run Code Online (Sandbox Code Playgroud)
除了EXPR1仅评估一次.这是一种方便的写作方式
EXPR1 = EXPR2 if !defined(EXPR1);
Run Code Online (Sandbox Code Playgroud)
有关Perl运算符的文档,请参阅perlop.
回到my $i //= '08';.这意味着
my $i;
$i = '08' if !defined($i);
Run Code Online (Sandbox Code Playgroud)
但$i总是未定义.写作会好得多
my $i = '08';
Run Code Online (Sandbox Code Playgroud)
它是"定义或"运算符.
$i //= '08';
Run Code Online (Sandbox Code Playgroud)
相当于:
$i = defined($i)? $i: '08';
Run Code Online (Sandbox Code Playgroud)
它是在Perl 5.10.0中引入的,旧版本不支持.
$i //= '08'是一样的$i = defined($i) ? $i : '08'.它几乎相同$i ||= '08',转换为$i = $i ? $i : '08'.现在,当你声明你的变量时my,它被设置为undef.因此,它将始终遵循08分支.另外,如果您想知道,//操作员出现在Perl v5.10中; 所以它会在较旧的Perls上生成编译错误.