# `my`关键字 - Perl 中的本地和全局变量

> 原文： [https://beginnersbook.com/2017/05/my-keyword-local-and-global-variables-in-perl/](https://beginnersbook.com/2017/05/my-keyword-local-and-global-variables-in-perl/)

当我们谈论局部和全局变量时，我们实际上在讨论变量的范围。

## 局部变量

局部变量范围是局部的，它存在于这两个花括号（通常称为代码块）之间，在该块之外这个变量不存在。这些变量也称为**词汇变量**。

这些变量可以在任何代码块中使用，它可以在任何控制结构块中，如`if`，`if-else`等，或任何循环块，如`for`，`while`，`do-while`等或任何子例程的块，它甚至可以出现在匿名区块中。例如：

```perl
#!/usr/bin/perl
use strict;
use warnings;
if (1<2)
{
    my $age = 29;
    print "$age\n";     # prints 29
}
```

我知道这个例子没有任何意义，但我的观点是向您展示局部变量在程序中的外观。在上面的程序变量中，`$age`在`if`中被声明，因此这个变量只对这个块是本地的。如果我们尝试在`if`体外访问此变量，我们会收到错误。让我们看看这个在行动，运行以下程序。

```perl
#!/usr/bin/perl
use strict;
use warnings;
if (1<2)
{
    my $age = 29;
    print "$age\n";     # prints 29
}
print "$age\n";
```

**输出：**

```perl
Global symbol "$age" requires explicit package name at demo.pl line 9.
Execution of demo.pl aborted due to compilation errors.
```

**注意：**

1）使用`my`关键字声明局部变量，如上面的程序所示。

2）由于局部变量的范围仅限于块，因此可以在不同的块中使用相同名称的局部变量而不会发生任何冲突。

3）在整个程序中可以访问在编译指示之后的程序开头使用`my`关键字声明的变量。例如，程序中可以访问此程序中的变量`$age`。

```perl
#!/usr/bin/perl
use strict;
use warnings;
my $age =29;
if (1<2)
{
    print "$age\n";     
}
print "$age\n";
```

**输出：**

```perl
29
29
```

**关于`my`关键字很少有重要的事情：**

直到现在，我们已经了解到`my`关键字用于声明局部变量，让我们看一下关键词的重点。

1）使用`my`关键字声明多个变量时，必须使用括号，否则只声明一个局部变量。例如，

```perl
my $num1, $num2;  # This would not declare $num2.
my ($num1, $num2); # This is the correct way. It declares both
```

2）除了变量之外，您还可以使用`my`关键字声明本地数组和本地哈希。

例如，此代码声明本地数组`@friends`。

```perl
my @friends;
```

## 全局变量：

这不需要任何介绍，因为我们在我们的程序中使用它们，因为我们启动了 perl 教程。在没有声明的情况下直接使用的所有变量（使用`my`关键字）都可以从程序的每个部分访问。例如，

```perl
#!/usr/bin/perl
use warnings;
if (1<2)
{
    $age =29;     #no declaration using my keyword
    print "$age\n";     
}
print "$age\n";  #accessible outside the block
```

**输出：**

```perl
29
29
```

**注意**：在这个程序中，我们删除了`use strict pragma`，因为它强制我们在使用之前使用`my`关键字声明所有变量。