变量名中的 Perl 变量替换

2023-12-31

#!/usr/bin/perl
my $var_a;
$sub_a = "a";
$var_a = "a";
print ${var_."$sub_a"},"\n";


$sub_b = "b";
$var_b = "b";
print ${var_."$sub_b"},"\n";

__DATA__

b

为什么打印b,而不打印a?这对我来说似乎是非常出乎意料的行为。

我正在尝试使用带有替换名称的变量。实际上,我不能不声明变量,因为赋值是在 forloop 中完成的,因此具有不同的词法范围。


请注意,这与您使用变量包含其他变量的名称这一事实无关。

这不起作用的原因是因为${"var_a"}现实中的construct指的是包级别的变量$main::var_a.

Since $var_a被声明为词法变量,它是一个不同的标识符,因此${"var_a"}是未定义的。

你可以看到,如果你改变my $var_a to our $var_a

our $var_a="a";
my $var_b="b";
$var_c="c";

print ${"var_a"},"\n";
print ${"var_b"},"\n";
print ${"var_c"},"\n";

######## RESULTS:
a

c

正如其他人指出的那样,虽然对于为什么您尝试做的事情不起作用有一个很好的解释,但您正在做的事情可能是错误的方法。除非没有更好的方法,否则你几乎不应该使用这种方法;如果没有你的问题,不清楚更好的方法是什么,但很可能是像 TLP 的答案所说的散列。

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

变量名中的 Perl 变量替换 的相关文章

  • 在 Perl 中实现 CLI 工具的最佳实践是什么?

    我正在使用 Perl 实现 CLI 工具 我们可以遵循哪些最佳实践 作为前言 我花了 3 年时间为一家大型金融公司设计并实现了一个相当复杂的 Perl 命令行工具集 以下想法基本上是我们团队设计指南的一部分 用户界面 命令行选项 允许尽可能
  • 检查程序是否正在运行,如果不在 perl 中则运行它

    我想知道如何检查程序是否正在运行 如果没有则运行该程序 使用 Kill 函数向要检查的进程 ID 发送 0 零 信号 如果进程存在 函数返回true 否则返回false Example check if process 1525 is ru
  • 如何强制 Perl 按需重新编译使用“/o”编译的正则表达式?

    技术问题 给定一个正则表达式 my regEx qr whatever myVar oxi Notice o for compile once 强制重新编译的最有效方法是什么一经请求 例如 当我从程序逻辑中知道 myVar值改变 而不下降
  • 如何使用 Time::Piece strptime 解析微秒?

    我有一个时间戳 看起来像25 OCT 10 04 11 00 000000 AM 我正在尝试将其转换为时间格式 Time Piece gt strptime 25 OCT 10 04 11 00 000000 AM d b y I M S
  • 在 Perl 中将整个文件读入哈希值

    我在 Perl 中将文件读入哈希时遇到一些问题 Chr1 supercontig 000000000 1 500 PILOT21 588 1 3 14602 59349 1 Chr1 supercontig 000000001 5 100
  • 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

    除非我使用备份扩展指定它们 否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码 C gt perl i ape splice F 2 0 q inserted text qq F n file1 txt Can t d
  • Emacs cperl - 常量块中的缩进

    我正在运行基于 GNU Emacs 24 3 50 2 的 Aquamacs 3 0a cperl 版本是 6 2 当我编辑 Perl 常量块时 我得到了我不想要的额外缩进 use constant ONE gt 1 TWO gt 2 TH
  • 从 Perl 线程生成 Expect

    我正在编写一个脚本 该脚本需要定期 每 5 分钟 生成一个 Expect 进程来完成一些工作 下面是我的代码 它生成一个 Expect 进程并执行一些工作 脚本的主要进程始终在做一些其他工作 例如它可能等待用户输入 因为我在一个线程中调用这
  • Perl LWP::简单 HTTPS 错误

    我正在尝试获取网站的内容并打印 该代码按照我希望的方式在常规 HTTP 网站上运行 但它不适用于 HTTPS 我已经查找了此问题的修复程序 但它们在我的程序中不起作用 这是我目前拥有的代码 usr bin perl use strict u
  • 更新命令行输出

    我的程序 碰巧是用 Perl 编写的 尽管我不认为这个问题是 Perl 特定的 在程序中的某一点输出状态消息 Progress x yy where x and yy是一个数字 例如 Progress 4 38 我想在打印新的状态消息时 覆
  • 为什么Perl的SUPER调用不使用箭头方法?

    我注意到 当您调用超类的方法时 您需要执行以下操作 my self class gt SUPER new 为什么不是这样 my self class gt SUPER gt new 我怀疑是因为 class gt SUPER gt new
  • Perl6:我怎样才能使所有警告都是致命的?

    我怎样才能使 Perl6 中的所有警告都是致命的 以便脚本在屏幕上出现警告时立即终止 CONTROL when CX Warn note exit 1 更频繁地死亡 该脚本终止于CONTROL when CX Warn note exit
  • Perl 删除目录中的所有文件

    我怎样才能删除allPerl 中目录中的文件 不删除目录 我的主机只允许最多 250 000 个 文件 而我的 tmp 文件夹会在所有会话 cookie 运行的情况下快速填充 250 000 个 qouta 在这种情况下我无法删除 tmp
  • 使用 Perl 循环 JSON [重复]

    这个问题在这里已经有答案了 我是 Perl 的新手 想要循环这个 JSON 数据并将其打印到屏幕上 我怎样才能做到这一点 arr Year 2012 Quarter Q3 DataType Other 3 Environment STEVE
  • 合并 Perl Hashref 和 unique

    我有两个 Perl 哈希值 内容如下 First VAR1 name1 gt adam bob name2 gt Miller Schumacher Second VAR1 name1 gt tina jason jeff
  • 如何使用 Net::SSH::Perl 和公钥?

    我正在尝试使用Net SSH Perl使用公钥与此代码进行连接 my ssh Net SSH Perl gt new host debug gt 1 die 我将密钥放在 root ssh id rsa 和 root ssh identit
  • 迭代哈希数组

    我编写了下面的例程 迭代哈希值 0 7 并打印出每个哈希值中特定键的值 我需要获取每个哈希中 b4 的值 我想取消 0 7 当存在不同数量的哈希值时使用更智能的东西 例如 有时只有 2 个 也可能有 160 个 my out decode
  • Path::Class::File 或 ::Dir & Moose 初始化和强制

    目前有 package Local use warnings use Moose use Method Signatures Simple use Path Class File use Path Class Dir method buil
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • 使用 Perl 获取 值

    因此 我有一个报告工具 可以在 HTML 文件中输出作业调度统计信息 并且我希望使用 Perl 来使用这些数据 但我不知道如何单步浏览 HTML 表 我知道如何使用 jQuery 来做到这一点 find tr each function v

随机推荐

  • (一张表)获取没有联合的行

    抱歉 我只是不知道如何简要解释我想要实现的目标 但其实很简单 我有下表egr offid groupid 1 101 1 202 2 202 2 404 我想获取 groupid 未链接到其他 offid 的行 结果将是 offid gro
  • 火狐浏览器不删除cookies

    cookie 过期的时间 这是一个 Unix时间戳所以是在数量 自纪元以来的秒数 其他 换句话说 你很可能会设置这个 使用 time 函数加上 距离您需要的秒数 直到到期为止 或者您可以使用 mktime time 60 60 24 30
  • Flipboard 或 iBooks 风格的动画

    有没有类似 iBooks 或 Flipboard 等模拟翻页的示例 YES 前几天我在 github 上看到了这个 http github com brow leaves http github com brow leaves 类似 iBo
  • Laravel 服务容器和服务提供者

    需要通过示例了解Laravel服务容器和服务提供者 The 服务容器是我们应用程序的地方bindings被存储 和服务供应商是我们注册绑定的类服务容器 在 Laravel 的旧版本中 我们没有这些提供程序 开发人员总是询问在哪里放置绑定 答
  • 如何从 List 获取 IntStream?

    我可以想到两种方法 public static IntStream foo List
  • 新 Firebase 中的 Firebase AngularFire

    我有一个角度应用程序 它利用 angularFire 库 firebase文档中指出支持angularfirehttps firebase google com support guides firebase web update your
  • 在烧瓶中嵌入散景图和数据表

    我正在尝试使用 Bokeh 文档中提供的一些示例将散景图和散景数据表嵌入到烧瓶生成的网站 同一页面 中 两个组件都独立工作 我尝试通过 gridplot 将它们放在一起 但这似乎只适用于绘图 而数据表是一个 小部件 我可能缺少一些非常基本的
  • 在 Visual Studio Code 中进行格式化时,将 HTML 属性包裹在用户设置的新行上

    在我们的团队中 有些人使用 Webstorm 其他人使用 Visual Studio Code 当用户将属性放在新行上时 Webstorm 会垂直对齐属性 它将与行中的最后一个属性对齐 Visual Studio Code 有一个设置 您可
  • 动画内在内容大小的变化

    我有一个 UIView 子类 它绘制一个半径变化的圆 带有漂亮的弹性动画 视图决定了圆的大小 我希望这个 UIView 子类更改其帧大小以匹配对圆半径的动画更改 并且我希望这些更改能够修改连接到视图的任何 NSLayoutConstrain
  • .net micro (µ) 希腊字母大写问题

    我有以下代码 string firstMicro aa u00b5 bb string secondMicro aa u03bc bb Assert IsFalse firstMicro secondMicro string upperFi
  • 如何显示 PHP 错误?

    我已经检查了我的 PHP ini 文件 php ini and display errors已设置 并且错误报告也已设置E ALL 我已经重新启动了我的 Apache 网络服务器 我什至将这些行放在脚本的顶部 它甚至没有捕获简单的解析错误
  • 负载平衡 Web 服务器上的 Orchard CMS

    我正在考虑在负载平衡服务器上运行 Orchard CMS 两台带有硬件负载平衡器的 Web 服务器和一个 SAN 文件共享 我一直无法找到这方面的任何信息 我想知道是否会存在更新和缓存问题 如果缓存页面 更新是否会传播到其他服务器 我还想知
  • Android:如何以对话框或弹出窗口的形式显示 wifi(选择要连接的 SSID)?

    我开发了一个应用程序 想要将 wifi 网络显示为对话框 弹出窗口 我的代码是 startActivity new Intent WifiManager ACTION PICK WIFI NETWORK It just show wifi
  • Certbot - 找不到合适的 TLS CA 证书捆绑包 [Archlinux]

    我正在尝试通过 certbot 软件包版本 0 21 1 1 从 Let s Encrypt It 生成证书 但出现错误 我正在使用 webroot 模块 OSError Could not find a suitable TLS CA c
  • 基于Ajax响应的Reactjs动态页面中404如何处理?

    我有带有动态 ID 的反应组件
  • 芹菜:“明显偏离”

    我的分布式系统上的芹菜有很大的问题 我有几台不同本地化的机器 并且我的日志文件中有很多警告 例如 与 celery host 发生重大偏差 我能够设置日期以返回相同的值 即使机器位于不同的国家 地区 但 python print utcof
  • 我不想在生成记录时显示 mysql 中的某些表和某些列

    由于我已经让管理员动态创建表单 当他创建表单时 我所做的是动态创建表单的表 一切都工作正常 现在我想显示用于生成报告的表格和列 我不想表现出来 用户登录 地点 地点 用于生成报告的表格和三列 user id 用户常用号 年份 这三列对于我动
  • 你的清单中的 android:description 标签出现在哪里?

    android label 参数显示在主屏幕上的图标下方 但我看不到 android description 标签显示在手机上的位置 主屏幕 应用程序设置菜单 我在Android官方文档中没有找到答案 任何想法 虽然我在 Android 操
  • HTML 复选框表单和 HTTP URL

    所以 我有这个 HTML 表单
  • 变量名中的 Perl 变量替换

    usr bin perl my var a sub a a var a a print var sub a n sub b b var b b print var sub b n DATA b 为什么打印b 而不打印a 这对我来说似乎是非常