如何与具有哈希属性的 Perl 对象交互?

2024-03-21

我有一个包含多个变量的类,其中一个是散列(_runs):

sub new
{
    my ($class, $name) = @_;
    my $self = {
        _name => $name,
        ...
        _runs => (),
        _times => [],
        ...
    };
    bless ($self, $class);
    return $self;
}

现在,我要做的就是创建一个访问器/修改器,以及另一个将新数据推送到哈希中的子例程。但我很难让所有引用/取消引用/$self 调用一起工作。我已经因为“不能使用字符串(“blah”)作为哈希引用等”错误而烧伤了我的眼睛。

对于访问者来说,返回哈希值的“最佳实践”是什么?我应该使用以下选项中的哪一个(如果有)?:

return $self->{_runs};
return %{ $self->{_runs} };
return \$self->{_runs};

此外,当我在类中的其他子例程中使用哈希时,我应该使用什么语法来复制它?

my @runs = $self->{_runs};
my @runs = %{ $self->{_runs} };
my @runs = $%{ $self->{_runs} };
my @runs = $$self->{_runs};

迭代键也是如此:

foreach my $dt (keys $self->{_runs})
foreach my $dt (keys %{ $self->{_runs} })

那么实际添加数据怎么样?

$self->{_runs}{$dt} = $duration;
%{ $self->{_runs} }{$dt} = $duration;
$$self->{_runs}{$dt} = $duration;

你明白了。我一直在阅读有关使用类的文章以及有关引用和取消引用的文章,但我似乎无法让我的大脑结合这些知识并同时使用两者。我终于让我的 _times 数组工作了,但是模仿我的数组语法到哈希值不起作用。


您正在对象中存储对数组或哈希的引用。要将它们与标准函数一起使用,您需要取消引用它们。例如:

@{ $self->{_array_ref_key} }; 
%{ $self->{_hash_ref_key} };

如果需要将参数传递给标准函数:

push( @{ $self->{_array_ref_key} }, $some_value );
for my $hash_key ( keys %{ $self->{_hash_ref_key} }) {
    $self->{_hash_ref_key}{$hash_key}; ## you can access hash value by reference
}

Also $self->{_hash_ref_key}{$hash_key}语法是快捷方式$self->{_hash_ref_key}->{$hash_key}(如果您第一次看到它,这可能是有意义的)。

还看一下相应的手册页 http://perldoc.perl.org/perlref.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何与具有哈希属性的 Perl 对象交互? 的相关文章

随机推荐

  • 使用 smack 库的 GCM NoResponseException:回复超时内未收到响应

    我是 gcm 新手 我尝试使用 Smack API 连接到 GCM 的云连接服务器 XMPP 一开始还好 我的代码 uid 123456789 apiKey A B XMPPTCPConnectionConfiguration Builde
  • 当其中任意 1 个组合框发生更改时,列表框中的所有组合框都会发生变化

    我有一个ListBox在绑定到的表单上ObservableCollection自定义类型 每个项目内都有一个ComboBox绑定到枚举类型 当窗口加载时 所有ComboBoxes 默认为某个值 当我改变SelectedItem对于任何一个
  • 如何设置“git集群”

    我们正在考虑将我们的源代码版本控制系统从 Subversion 更改为 Git 我们正在突破当前设置的限制 并认为使用 git 会更好 我们一直在办公室使用主服务器 并在数据中心运行镜像 镜像配置为代理传入主服务器的提交 这样 两台机器就像
  • 为什么 emacs 中的 vc-git 和 magit 忽略我的 git 配置设置?

    我正在使用 magit 运行 emacs 24 1 1 的官方 Windows 二进制文件 当我提交文件时 日志中显示的用户名和电子邮件将从我的帐户和计算机名称中删除 而不是使用全局 git 配置或此重现的本地设置中设置的值 从 git b
  • 如何向数组添加元素?

    如何向现有数组添加元素 我有数组 Array 0 gt Array user id gt 1 user login gt Saibamen user password gt 4028a0e356acc947fcd2bfshfh3w26gds
  • SDL2 升起窗口而不给予焦点

    我需要在窗口上显示工具提示 我正在使用工具提示创建第二个窗口 并使用 SDL RaiseWindow 将其带到顶部 然而 这样做会导致工具提示窃取焦点 这不是我想要的 有没有办法在不改变焦点的情况下将窗口置于顶部 另外 有没有办法在不改变窗
  • inDither = true Android

    有人可以解释一下设置时到底发生了什么吗抖动 true在 Android 中配置位图的上下文中 在 Developer Android 上可以阅读有关静态变量的信息 Config RGB 565 根据源的配置 此配置可能会产生轻微的视觉伪影
  • 为什么Java的SimpleDateFormat不是线程安全的? [复制]

    这个问题在这里已经有答案了 请用代码示例说明为什么 SimpleDateFormat 不是线程安全的 这堂课有什么问题 是SimpleDateFormat的格式化函数的问题 请给出在课堂上演示此错误的代码 FastDateFormat 是线
  • 如何在PyUsb中绑定/取消绑定USB设备?

    我需要在 python 脚本上打开 关闭多个 USB 设备 我可以使用 PyUsb 绑定和取消绑定 USB 设备吗 我可以使用 shell 命令来做到这一点 关闭电源 echo device nuber gt sys bus usb dri
  • SQLite - 表约束唯一和列约束唯一之间有什么区别?

    关于 SQLite 的问题 在 CREATE TABLE SQL 中 我们可以通过以下任一方式添加 UNIQUE 约束 列约束或表约束 我的问题很简单 他们的工作方式不同吗 我能发现的唯一区别是 在表约束中 可能有多个indexed col
  • 找出 MySQL 在 Mac OS X 上的安装位置

    如何找出 Mac OS X 10 7 9 上 MySQL 的安装位置 我安装了 MAMP 所以我认为它与此安装捆绑在一起 要检查 MAMP 的 MySQL 版本 请在终端中使用以下命令 Applications MAMP Library b
  • DOCX w:t(文本)元素跨越多个 w:r(运行)元素?

    我们编写了一个软件 可以从 Word 文档的内部 XML 文件中处理 XML 并用替换值替换某些代码 有时我们发现此类代码在多次运行之间被破坏 以下是我们有时会遇到的此类情况的示例
  • 为子类添加额外的“方法”

    这是一个概念性问题 旨在了解如何在 C 中完成 OOP 技术 我知道它不实用或不推荐 并且有许多语言可以更好地实现此目的 但我只是看看作为初学者如何完成它到 C 假设我有一个名为的基础对象Thing 它将有一些数据和一些功能 然后我想添加另
  • 出现 TypeError:this.props 在 ReactJs 上未定义

    我正在尝试做教程 https facebook github io react docs tutorial html https facebook github io react docs tutorial html import Reac
  • 带有“fromCharCode”(字符长度)的 Javascript 映射数组

    以下内容来自 Chrome 控制台中的交互式会话 myarray gt 67 65 84 String fromCharCode 67 gt C String fromCharCode 67 length gt 1 String fromC
  • 可利用的 C# 函数 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这个问题类似于可利用的 PHP 函数 https stackoverflow com questions 3115559 exploi
  • Kendo UI 绑定弹出编辑器中的下拉值

    我有一个 Kendo 网格 它可以选择使用弹出编辑器添加新记录 弹出编辑器中的一个字段是 DropDownList 当我打开弹出编辑器时 我从下拉列表中预先选择了第一条记录 由于我预先选择了它 我希望它在网格内自动创建 绑定 当按 更新 时
  • Python 会缓存重复访问的文件吗?

    我想知道 Python 是否足够聪明 可以缓存重复访问的文件 例如当使用 pandas 读取相同的 CSV 或多次 unpickle 相同的文件时 这是否是 Python 的责任 还是应该由操作系统来处理 不 Python 只是一种语言 它
  • Snakemake - 如何使用文件的每一行作为输入?

    我需要使用文件的每一行tissuesused txt作为snakemake中并行规则的输入 我想总共大约有 48 个工作机会 for line in cat tissuesused txt do echo Sorting line phen
  • 如何与具有哈希属性的 Perl 对象交互?

    我有一个包含多个变量的类 其中一个是散列 runs sub new my class name my self name gt name runs gt times gt bless self class return self 现在 我要