在 Perl 中使用数据引用的正确方法

2024-05-17

我有一组想要处理的数据。

为了简化我的代码,最好通过指向原始数据的引用数组来访问我的数据的某些子集。

比解释更好的是,我写下了这个例子(它还没有工作)。最后,我想更新原始数据,而不必更新所有子集。

用 Perl 可以做这样的事情吗?

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

# A set of data
my $design = {
    box => {
        ne =>  {data => 'north-east'},
        nw =>  {data => 'north-west'},
        n  =>  {data => 'north'},
        s  =>  {data => 'south'},
        e  =>  {data => 'east'},
        w  =>  {data => 'west'},
        se  => {data => 'south-east'},
        sw  => {data => 'south-west'}
    }
};

# Select a design
my $selected = 'box';

# Build some arrays
my $d = $design->{$selected};

my @eastside  = (\$d->{e}, \$d->{ne}, \$d->{se});
my @westside  = (\$d->{w}, \$d->{nw}, \$d->{sw});
my @northside = (\$d->{n}, \$d->{ne}, \$d->{nw});

# Update one data
$d->{ne}->{data} .= " updated!";

# Display
print join '', "Composed of:\n", map("\t".$_->{data}."\n", @eastside);

该脚本应输出:

Composed of:
   east
   north-east updated!
   south-east

错误之处在于您所引用的值已经是像这样的行中的哈希引用

my @eastside  = (\$d->{e}, \$d->{ne}, \$d->{se})

您应该简单地省略反斜杠,一切都会起作用。

(顺便说一下,您可能想知道参考文献\运算符是分布式的,所以你可以写同样的东西

my @eastside  = \( $d->{e}, $d->{ne}, $d->{se} )

但那样就不再正确了!)

其他一些要点

  • 你应该利用哈希片在这种情况下,您需要使用多个键提取哈希元素列表。在这种情况下@eastside只是@{$d}{qw/ ne e se /}

  • Perl 允许间接运算符->成对的右大括号和左大括号之间的 和括号被省略,所以$d->{ne}->{data}可以写成$d->{ne}{data}

  • 您正在打印 a 的结果join元素之间有一个空值。只需列出要打印的项目即可获得相同的结果。您还可以将哈希元素插入双引号字符串中,因此"\t".$_->{data}."\n"是相同的"\t$_->{data}\n"

进行这些更改会产生此工作计划

use strict;
use warnings;

# A set of data
my $design = {
   box => {
      ne => {data => 'north-east'},
      nw => {data => 'north-west'},
      n  => {data => 'north'},
      s  => {data => 'south'},
      e  => {data => 'east'},
      w  => {data => 'west'},
      se => {data => 'south-east'},
      sw => {data => 'south-west'},
   }
};

# Select a design
my $selected = 'box';

# Build some arrays
my $d = $design->{$selected};

my @eastside  = @{$d}{qw/ ne e se /};
my @westside  = @{$d}{qw/ nw w sw /};
my @northside = @{$d}{qw/ nw n ne /};

# Update one item
$d->{ne}{data} .= " updated!";

# Display
print "Composed of:\n"; 
print "   $_->{data}\n" for @eastside;

output

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

在 Perl 中使用数据引用的正确方法 的相关文章

  • Visual Studio 参考在多项目环境中未被复制

    我在 VS 2010 中有一个解决方案文件 其中有多个项目 现在 我有一个对该 dll 调用 MySql Data Entity dll 的引用 例如 我在解决方案中设置了以下项目 域 引用MySql Data Entity dll Dom
  • 如何使用“子例程引用”作为哈希键

    在 Perl 中 我正在学习如何取消引用 子例程引用 但我似乎无法使用子例程引用作为哈希 键 在下面的示例代码中 我可以创建对子例程 subref 的引用 然后取消引用它以运行子例程 subref 我可以使用引用作为哈希 值 然后轻松取消引
  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu
  • 将 stdin/stdout 从执行进程重定向到 Perl 中的管道

    我试图让执行子进程中的 STDOUT STDERR 通过 Perl 中的管道返回到父进程 我见过的最接近我想做的事情是 http forums devshed com perl programming 6 exec and redirect
  • javascript:完全删除top.location.hash?

    如果我的地址栏中已经有一个哈希值 例如domain com whatever 我打电话 top location hash wathever 被转换为domain com 没有任何内容 是否可以完全删除哈希值 所以没有 left 因为如果我
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • 为什么 Perl 的 LWP 给我的编码与原始网站不同?

    可以说我有这个代码 use strict use LWP qw get my content get http www msn co il print STDERR content 错误日志显示类似 xd7 x9c xd7 x94 xd7
  • Perl `join` 生成多行字符串

    我有这个程序来对两个数组进行排序 usr bin perl w movies movies txt open FHD movies die could not open movies n movies
  • 从函数返回哈希值的最佳 Perl 实践是什么?

    我正在考虑将哈希引用传递给函数或从函数返回数据的最佳实践 一方面 仅将输入值传递给函数并仅返回输出变量似乎很直观 然而 在 Perl 中传递哈希值只能通过引用来完成 因此有点混乱 而且似乎更有可能犯错误 另一种方法是在输入变量中传递引用 但
  • md5 哈希冲突。

    如果从 1 数到 X 其中 X 是第一个与前一个数字发生 md5 冲突的数字 那么 X 是哪个数字 我想知道如果我使用 md5 作为序列号 在发生冲突之前我可以期望能够枚举多少个单元 Theoretically you can expect
  • Visual Studio '17 未在参考管理器中显示程序集

    我遇到的问题是 我似乎无法弄清楚如何添加对某些解决方案的引用 在我从 Visual Studio 17 开始的大多数解决方案中 我在解决方案资源管理器中看到 引用 但例如对于 asp net core web api 我得到 依赖项 每当解
  • 如何加速我的 Perl 程序?

    这确实是两个问题 但它们非常相似 为了简单起见 我想我应该把它们放在一起 Firstly 给定一个已建立的 Perl 项目 除了简单的代码优化之外 还有哪些不错的方法可以加速它 Secondly 用Perl从头开始编写程序时 有哪些好的方法
  • Perl 拆分和正则表达式

    我有以下字符串 100 California Grown Olives Water Salt And Ferrous Gluconate An Iron Derivative asasd sadasda 我想把它分开 but only if
  • Perl:模板工具包的替代品

    我使用模板工具包来扩展现有的领域特定语言 verilog 已经超过 3 年了 虽然总的来说我对此感到满意 但主要的刺激性是 当出现语法 undef 错误时 错误消息不包含用于调试错误的正确行号信息 例如我会收到一条消息 指示 0 未定义 因
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • MD5 哈希怎么可能无法“解密”呢? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 MD5 哈希值不可逆 https stackoverflow com questions 330207 how come md5 hash values are not reversible
  • 使用 2 个不同的哈希函数是检查文件完整性的好方法吗?

    我有一个网站 用户可以上传他们的文件 它们存储在服务器上 其元数据记录在数据库中 我正在实施一些简单的完整性检查 即 该文件的内容现在逐字节与上传时是否相同 示例 对于内容userfile jpg MD5 哈希为39f9031a154dc7
  • Google Analytics 和哈希/锚点不起作用

    我希望你可以帮助我 我有一个 Javascript 画廊 每张图片都有一个特定的哈希值 www example com gallery html title 1 我的统计数据位于 Google Analytics 上 但即使我在相应的代码中
  • Perl 三元条件运算符内部赋值问题

    我的程序中的这段 Perl 代码给出了错误的结果 condition a 2 a 3 print a 无论价值如何 condition就是 输出总是3 为什么呢 Perl 中对此进行了解释文档 http perldoc perl org p
  • Web 开发中的 Perl [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐