【问题标题】:Arrays and negative indexes in PerlPerl 中的数组和负索引
【发布时间】:2013-04-01 10:11:34
【问题描述】:

我是Perl 的新手,我正在阅读有关数组的内容。
据我了解,数组会根据需要自动扩展(酷!)
但我也读到我们可以使用负索引以相反的顺序访问数组。
例如。可以通过以下方式访问 3 个元素的数组:
$array[0] $array[1] $array[2]

$array[-1] $array[-2] $array[-3](倒序)。
我的问题是小于-3 的值会发生什么情况@ 例如$array[-5]?
数组是扩展还是什么?

【问题讨论】:

  • 测试一下。这些类型的问题有利于你自己解决
  • 你为什么不试试呢?
  • 我可以尝试一下,但我正在尝试理解内存模型,如果这在 Perl 中有意义的话。如果不是,我可以关闭问题
  • 简单地说:undef 就是你得到的
  • 你可以用一个衬里来测试它,但一定要使用 -w 以便发现所有问题。 (使用脚本语言的一个原因是因为它很容易测试。)

标签: arrays perl


【解决方案1】:

如果你读取它,结果与读取$array[5] 相同——该值不存在并且你得到一个 undef。尽头向左走和尽头向右走是一样的。

如果你写它,你会得到一个错误。数组只能自动向右扩展。

【讨论】:

  • 我有一个特殊的 Perl 版本,我的数组首先面对我的是零端。它们只能自动从我身边延伸出去。
【解决方案2】:

如果您读取该值,您将获得一个 undef 值。

use strict;
use warnings;

my @l = qw(A B C);
print $l[-4];

输出到stderr(程序继续运行):

Use of uninitialized value in print at ./x.pl line 7.

或者:

my @l = qw(A B C);
print "undef" if !defined $l[-4];

输出:

undef

如果你想给它赋值你会得到一个错误:

my @l = qw(A B C);
$l[-4] = "d";

输出(程序退出):

Modification of non-creatable array value attempted, subscript -4 at ./x.pl line 7.

实际上可以修改间隔。所以一个数组不仅可以从 0 开始任何值。

my @l = qw(A B C);
$[ = -4; # !!! Deprecated
print $l[-4], "\n";
print $l[-3], "\n";

输出:

A
B

【讨论】:

  • $[ 已弃用;不要使用它。
【解决方案3】:

你不能,它会抛出错误:

尝试修改不可创建的数组值,下标 -2

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 2018-04-27
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多