Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl $my\u数组与\@my\u数组何时不同?_Perl - Fatal编程技术网

Perl $my\u数组与\@my\u数组何时不同?

Perl $my\u数组与\@my\u数组何时不同?,perl,Perl,假设我将数组定义为: my @my_array = ["hello", "world"] 在我的代码后面使用$my\u array和\@my\u array有什么区别吗 我假设它们都是对@array的标量引用,但我认为我已经看到我的一个程序根据我使用的程序的不同而表现出不同的行为 他们之间有什么区别吗? @array是数组 $var是标量 \@array是标量-对数组的引用@array (“你好”,“世界”)是列表(与@array兼容) [“你好”,“世界”]标量,对数组的引用。这与将数组(“

假设我将数组定义为:

my @my_array = ["hello", "world"]
在我的代码后面使用
$my\u array
\@my\u array
有什么区别吗

我假设它们都是对
@array
的标量引用,但我认为我已经看到我的一个程序根据我使用的程序的不同而表现出不同的行为

他们之间有什么区别吗?

  • @array
    是数组
  • $var
    是标量
  • \@array
    是标量-对数组的引用
    @array
  • (“你好”,“世界”)
    是列表(与
    @array
    兼容)
  • [“你好”,“世界”]
    标量,对数组的引用。这与将数组
    (“hello”,“world”)
    存储在变量
    @array
    中,然后从中引用
    \@array
    相同
使用时:

my $my_array = ["hello", "world"]
my @my_array = ["hello", "world"]
您可以创建变量
$my_array
,该变量引用数组
(“hello”,“world”)

使用时:

my $my_array = ["hello", "world"]
my @my_array = ["hello", "world"]

您创建了一个包含单个元素的数组:对数组的引用
(“hello”,“world”)

\@my\u数组
$my\u数组
之间有什么区别吗?这取决于:

my @my_array = qw(hello world); #Note the use of parentheses
my $my_array = "Hello, I am just some random string!";
在上述情况下,
\@my\u array
$my\u array
之间存在差异。变量名中的相似性并不一定意味着关系

然而:

my @my_array qw(hello world);
my $my_array = \@my_array;
\@my\u array
$my\u array
是相同的。
@my_array
中的更改将反映在参考
$my_array

在代码中,您有:

my @my_array = ["hello", "world"];
这真是一个奇怪的语法

[…]
语法定义对数组的引用。大多数时候,你会看到这样的情况:

my $array_ref = ["hello", "world"];  #Note the assignment to a scalar and not an array
或者这个:

my @my_array = ("hello", "world");  #Note the parentheses and not straight brackets
请使用以下命令查看此程序:

输出为:

$VAR1 = [
      [
        'hello',
        'world'
      ]
    ];

这意味着有一个由单个元素组成的数组(也就是说,你的
@my_数组
只包含
$my_数组[0]
),该数组中的元素是对另一个数组的引用,该数组包含两个元素“hello”和“world”。

你的第五个要点是错误的<代码>\(“你好”,“世界”)与
(\“你好”,“世界”)
相同。谢谢mvp。我认为
\@my\u array
$my\u array
之间没有区别,那么?我已经更新了OP以澄清任何潜在的混淆。@user815423426:不,它们完全不同。例如,虽然您可以使用语句
my$array
,不能使用
我的\@数组-它不会编译。同样,
$array
是标量变量,
@array
是列表变量,
\@array
是引用数组的标量值(不是变量!)。请向我们展示如何在可疑代码中定义
$my\u array
。你已经得到了相当全面的
perlref
介绍作为答案,但它们没有帮助。看到代码中的差异将有助于我们对您期望或不期望的差异进行评论。(事实上,现在我要说的是,您所展示的代码的主要区别是,
$my_array
将在
使用strict
:)下爆炸。)