gpt4 book ai didi

perl - 为什么在文件范围内用 "my"声明 Perl 变量?

转载 作者:行者123 更新时间:2023-12-04 23:21:38 25 4
gpt4 key购买 nike

我正在学习 Perl 并试图了解变量范围。我明白 my $name = 'Bob';将在 sub 中声明一个局部变量,但是为什么要使用 my全局范围内的关键字?这只是一个好习惯,所以您可以安全地将代码移动到子程序中吗?

我看到很多这样做的示例脚本,我想知道为什么。即使与 use strict ,当我删除 my 时它不会提示.我试过比较有和没有它的行为,我看不出有什么区别。

这是one example这样做:

#!/usr/bin/perl
use strict;
use warnings;

use DBI;

my $dbfile = "sample.db";

my $dsn = "dbi:SQLite:dbname=$dbfile";
my $user = "";
my $password = "";
my $dbh = DBI->connect($dsn, $user, $password, {
PrintError => 0,
RaiseError => 1,
AutoCommit => 1,
FetchHashKeyName => 'NAME_lc',
});

# ...

$dbh->disconnect;

更新

当我测试这种行为时,我似乎很不走运。这是我测试的脚本:
use strict;

my $a = 5;
$b = 6;

sub print_stuff() {
print $a, $b, "\n"; # prints 56
$a = 55;
$b = 66;
}

print_stuff();
print $a, $b, "\n"; # prints 5566

正如我从这里的一些答案中了解到的, $a$b是已经声明的特殊变量,因此编译器不会提示。如果我更改 $b$c在那个脚本中,然后它会提示。

至于为什么要用 my $foo在全局范围内,似乎文件范围实际上可能不是全局范围。

最佳答案

新增 my是关于 Perl 发生过的最好的事情,它解决的问题是拼写错误。

假设您有一个变量 $variable .您对该变量进行一些赋值和比较。

$variable = 5;

# intervening assignments and calculations...

if ( $varable + 20 > 25 ) # don't use magic numbers in real code
{
# do one thing
}
else
{
# do something else
}

如果你不这样做,你是否看到上面代码中的微妙错误 use strict;并要求用 my 声明变量? # do one thing案件永远不会发生。我在必须维护的生产代码中多次遇到过这种情况。

关于perl - 为什么在文件范围内用 "my"声明 Perl 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334008/

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