use strict;
my $world ="52";
my $in = "42" ;
my $world="42";
my $out = "good" ."good";
chop($out);
print $out;
不要担心代码。问题是我在两个不同的行中使用my $world
但是编译器没有给出任何错误但是如果我们考虑C语言的语法,那么我们将因为重新声明而得到错误变量。为什么perl没有给重新声明带来任何错误。我还有一个问题:标量变量的大小是多少?
答案 0 :(得分:11)
1 /变量重新声明不是错误。如果您包含“使用警告”,那么您会收到警告。
2 /“标量变量的大小”是指它可以存储的数据量?如果是这种情况,Perl不会施加任意限制。
您似乎很快就会发布很多相当简单的问题。您是否考虑过阅读"Learning Perl"?
答案 1 :(得分:5)
问题是我的$ world我在两个不同的行中使用它但是编译器说没有错误但是对于c我们得到错误作为变量的重新声明,但为什么不在perl中。
仅仅因为Perl不是C,重新定义变量不是错误条件。
这可能是导致意外行为的原因,如果你有use warnings;
(就像suggested to you before一样),它会被接收。
标量变量的大小是多少?有什么尺寸吗?
定义'尺寸'。字节?人物?别的什么?您可能正在寻找length
答案 2 :(得分:2)
因为Perl喜欢健壮。如果你打开了warnings
,你就会听说过它。
"my" variable $world masks earlier declaration in same scope at - line 7.
虽然USUW(use strict; use warnings;
)是一个很好的开发实践,但将使用autodie
- 如果 autodie担心语法警告。但是,以下概念大致相同,以确保您不会避免任何警告。
BEGIN { $SIG{__WARN__} = sub { die @_; }; }
上面的代码为警告创建了一个信号处理程序。但是,我认为这对初学者来说更好:
BEGIN {
$SIG{__WARN__}
= sub {
eval {
# take me out of the chain, to avoid recursion
delete $SIG{__WARN__};
# diag will install the warn handler we want to use.
eval 'use diagnostics;';
$SIG{__WARN__}->( @_ ); # invoke that handler
};
exit 1; # exit regardless of errors that might have cropped up.
};
}
您想要的任何地方,您都可以告诉perl您不想更改代码以发出特定类别的警告(diagnostics
将告诉您类别!)并且如果您明确告诉perl {{1它不仅不会警告你,而且它也不会触发警告处理程序,它会杀死程序。
这会给你一个更像c的感觉 - 除了c也有警告(所以你也可以实现一个词法计数器......哦。)