Perl 开始块和变量声明

Perl 开始块和变量声明,perl,syntax,Perl,Syntax,perl在BEGIN块中设置变量,但在BEGIN块外声明变量是否有效 是的,它是有效的。事实上,您必须这样做,否则$var将是BEGIN块的本地代码,在程序的其余部分中不可用。引述: my同时具有编译时和运行时效果。在编译时,编译器会注意到它。。。但是,实际的初始化会延迟到运行时,因此它会在适当的时间执行,例如每次通过循环执行 编译时效应就是为什么可以访问BEGIN块中的变量。请注意,my上的任何初始化都将在计算BEGIN块之后进行,因此将覆盖BEGIN可能设置的任何值。是的,它是有效的。事实上

perl在BEGIN块中设置变量,但在BEGIN块外声明变量是否有效


是的,它是有效的。事实上,您必须这样做,否则$var将是BEGIN块的本地代码,在程序的其余部分中不可用。引述:

my同时具有编译时和运行时效果。在编译时,编译器会注意到它。。。但是,实际的初始化会延迟到运行时,因此它会在适当的时间执行,例如每次通过循环执行


编译时效应就是为什么可以访问BEGIN块中的变量。请注意,my上的任何初始化都将在计算BEGIN块之后进行,因此将覆盖BEGIN可能设置的任何值。

是的,它是有效的。事实上,您必须这样做,否则$var将是BEGIN块的本地代码,在程序的其余部分中不可用。引述:

my同时具有编译时和运行时效果。在编译时,编译器会注意到它。。。但是,实际的初始化会延迟到运行时,因此它会在适当的时间执行,例如每次通过循环执行


编译时效应就是为什么可以访问BEGIN块中的变量。请注意,my上的任何初始化都将在计算BEGIN块之后进行,因此将覆盖BEGIN可能设置的任何值。

是的,但您可能需要小心使用此模式,因为非常类似的操作将与您预期的不同:

my $var = 5;
BEGIN { $var = 10 }

say $var; # 5

是的,但您可能需要小心使用此模式,因为非常相似的东西的工作方式可能与您预期的不同:

my $var = 5;
BEGIN { $var = 10 }

say $var; # 5

你为什么不试试呢?如果它无效,perl会告诉你我试过了,但我不喜欢它——也许我希望有人会说……,但不要使用它。你为什么不试试呢?如果它无效,perl会告诉您我尝试过它,但我不喜欢它-也许我希望有人会说……,但不要使用它。对于所有想知道的人来说:这是因为BEGIN块在$var=5之前运行,因此,$var=5将值从10更改为5,即使它们在代码中以相反的顺序出现。对于所有想知道的人来说:这是因为BEGIN块在$var=5之前运行,因此,$var=5将值从10更改为5,即使它们在代码中以相反的顺序出现。