首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过标量变量中的main::和sub名称符号表访问sub

通过标量变量中的main::和sub名称符号表访问sub,可以使用Perl语言中的符号表操作符*来实现。

在Perl中,符号表是一个特殊的哈希表,它存储了程序中定义的所有符号(变量、子程序等)的名称和引用。通过符号表,可以动态地访问和操作这些符号。

要通过标量变量中的main::和sub名称符号表访问sub,可以使用以下代码:

代码语言:perl
复制
my $sub_name = 'sub';  # 子程序名称
my $sub_ref = *{"main::$sub_name"}{CODE};  # 通过符号表获取子程序引用

# 调用子程序
$sub_ref->();

上述代码中,main::表示主程序的符号表,$sub_name是子程序的名称。通过将main::$sub_name作为字符串传递给符号表操作符*,可以获取到子程序的引用。然后,可以通过引用调用子程序。

需要注意的是,上述代码中的sub是一个示例子程序名称,实际使用时需要替换为具体的子程序名称。

关于Perl语言的符号表操作符*和符号表的更多详细信息,可以参考Perl官方文档中的相关章节:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JVM参数这样配置会让你程序更快更强

前期编译虽然是javac工具就可以来完成,其实这其中是一个非常复杂过程,包含了词法分析、填充符号表、注解处理、语义分析以及生成class文件,我们只需要关注常量池方法表集合两部分就可以了。...在Java7引入了分层编译,这就兼容了C1启动性能优势C2峰值性能优势,当然,也可以通过参数-clinet-server强制指定虚拟器即时编译器。...举例,在局部方法创建对象,只会被当前线程访问,无法被其他线程访问,所以是线程安全,JIT编译会把这个对象方法锁进行锁消除来提高性能。...标量替换 逃逸分析证明一个对象不会被外部访问,如果这个对象可以被拆分的话,当程序真正执行时候可能不创建这个对象,而直接创建它成员变量来代替。...将对象拆分后,可以分配对象成员变量在栈或寄存器上,原本对象就无需分配内存空间了。这种编译优化就叫做标量替换。

42810

【图片+代码】:GCC 链接过程【重定位】过程分析

示例代码 示例代码很简单,一共有2个源文件main.c sub.c。 在sub.c定义了一个全局变量一个全局函数,然后在main.c中使用这个全局变量全局函数。...以上这两个编译过程是各自独立,虽然main.o中使用了两个符号(全局变量全局函数),但是此时main.o并不知道这2个符号是在哪个文件定义。...在Linux系统,目标文件(.o) 可执行文件都是ELF格式,因此如何查看ELF格式文件一些工具指令就非常有帮助。...符号表,下面这张图(指令:readelf -s sub.o): 关注上图中黄色矩形两个符号:SubDataSubFunc,很明显它们就是sub.c定义两个符号:全局变量全局函数。...代码段是由main.o代码段sub.o代码段组合得到;对于数据段,由于 main.o数据段长度为0,所以main数据段就是sub.o数据段(长度为4),如下图所示: 符号表信息

74710
  • 《Perl进阶》——读书笔记(更新至14章)

    (或者访问数组或者散列单个元素)赋值,Perl将自动创建代码过程假定存在引用类型。...命名规则与变量一样,包名应当以一个大写字母开头(来源于perlmodlib文档) 包名也可以由::(双冒号)分隔多个名称:Name1::Name2 主程序包名为main Package...here ... } Perl v5.12后支持包语句块: package Navigation { ... code here ... } 无论当前包如何定义,有些名称变量总在main...包名称:ARGV, ARGVOUT, ENV, INC, SIG, STDERR, STDIN, STDOUT 标点符号变量:_, 2等 设置包版本方法: 设置VERSION值:our...这个模块不但可以自动创建发行版,而且在我们修改发行版文件后,它还知道如何更新发行包。

    4.7K50

    程序员C语言快速上手——工程篇(十二)

    这两个概念也同样适用于变量。每个函数或变量都有自己独特名字, 才能避免链接过程不同变量函数之间混淆。...在链接, 我们将函数变量统称为符号(Symbol) , 函数名或变量名就是符号名(Symbol Name) 。 将符号看作是链接粘合剂, 整个链接过程正是基于符号完成。...在C语言中我们通过变量访问一个变量,其实就是读写某个地址内存空间,通过函数名调用一个函数,其实就是跳转到该函数第一条指令所在地址,所以变量函数名都是符号,本质上就是代表内存地址。...由上可知,仅编译后生成二进制目标文件,其符号表相关符号地址都是用0代替,是无效地址。 我们再查看main.exe可执行文件符号表 ?...当模块需要调用目标函数时, 可以通过GOT项进行间接跳转,因为符号地址是相对偏移量,而不是一个绝对地址。 如果两个进程同时操作动态库全局变量,会造成冲突吗?

    1.3K20

    VB基础:掌握listboxcombobox控件应用【VB学习笔记2020课堂版04】

    课题04 列表框自动输入框综合使用 授课:刘金玉 回顾知识,符合以下要求任务练习学生管理功能模块: 1.界面制作 2.功能开发 课程目标:VB基础:掌握listboxcombobox控件应用...7)"66abc77"结果是66 8)"刘金玉123"结果是0 9)"567编程"结果是567 10)" "结果是0 在pictruebox打印文字,需要加上控件名称。...对比在form窗体打印:print "内容" 在pictruebox打印:picture1.print "内容" 写代码基本要求: 不同层次代码要求缩进一个tab 一个tab相当于4个空格 符号表示...单精度浮点型 double # 双精度浮点型 如何测试变量数据类型? 通过使用方法TypeName(变量),返回数据类型。...获取listbox列表框控件项数:listcount方法 通过索引获取列表框中指定项文本:list(索引) 方法 案例:遍历列表框所有项目 Dim i% For i = 0 To List1.ListCount

    2K10

    Matlab入门(一)

    在工作区以表格形式显示变量a与x名称,取值等信息。在工作区还可以对变量进行保存、编辑、删除等操作。...isprime(n) # 判断n是否是素数,是返回1,否返回0. 3.变量及其操作 计算机处理数据都是存放在内存单元,而每一个内存单元都有一个唯一地址,程序就是通过这个地址来访问对应内存单元。...在如Matlab这种高级语言中,只需要给每个内存单元取一个名字,然后通过这个名字就能访问每个内存单元了。...who命令whos命令: who命令只显示已存在变量名称。而whos显示包括变量类型,长度等信息。...矩阵元素序号与下标可以利用sub2indind2sub函数实现相互转换。 sub2ind函数:将矩阵中指定元素行、列下标转换成存储序号。

    19410

    理解 JDK MethodHandle

    同时,上面的例子也可以发现,通过Method反射调用是支持多态。 一切完美。但是从Java7开始,JDK又多了一个功能类似的成员,java.lang.invoke.MethodHandle。...不同是,MethodHandle成员方法要线bindTo到某个instance,bind过程已经做了类型检查;而Method成员方法左值是函数参数一起传入。...;而MethodHandle则会根据源码形参类型生成不同字节码(符号表),相当于在.class文件携带了更多信息。...简单来说就是调用标记了PolymorphicSignature方法时,不管源码传什么参数都是可以编译通过,编译器其实不按源码描述方法签名生成字节码,而是参考实际传入参数形式类型(或者称为变量类型更合适...在MethodHandle文档描述还有一点值得关注:MethodHandle访问性检查只在创建时检查一次,而Method则是每次调用都检查。

    5.2K00

    一个基于约束传播微型计算语言设计实现

    先介绍应用背景: 在流体机械设计,通常根据性能参数进行设计,算出其它变量,但问题是,在设计过程,需要进行变量手工调整,例如圆整,修正到某一范围,校核等等。.../usr/bin/env python # -*- coding: utf-8 -*- """ 变量is-a表达式 数值is-a表达式 故有如下继承关系 通过env符号表可以查到Expr实例 "...a") b=Var("b","变量b") if __name__=="__main__": test() 所有的变量当然是要保存到一个符号表(或称环境)里,同时,这个环境里还要有加减乘除...if self.env.filter_cmd(s): return s class Env(object): """ 求值环境,提供变量符号表函数符号表...[a-zA-Z_]+ 变量或函数名称标识符 5.[ \\t\\n] 忽略,或结束 由于使用正则表达式直接匹配,所以flex不同是: 无法确保当有多个匹配项时,最长优先

    31810

    python学习笔记5.1-理解模块

    模块 在python可以将模块理解为一个包含了特定功能类、函数、变量文件,它与其他python脚本文件也没有什么区别,文件类型也是.py文件,模块名就是该文件名。...2) PYTHONPATH环境变量里包含目录,并不是系统环境变量目录。 3) 标准库目录。 4) .pth文件目录。 对于1)3)都是系统自动生成,2)4)用于用户自定义扩展搜索路径。...2) 将模块目录添加到系统环境标量PYTHONPATH 3) 用函数sys.path.append(‘…’)添加 4) 添加.pth文件。...file2.py 这里模块名称是可以重复(最好不这么做),因为在导入包时候会有包名名称空间,因而导入时候会使用包名名称空间,例如: from A import sub_a from A import...sub_b 使用时候: sub_a.file1 sub_b.file1是不一样导入以及其他一些高级操作以后慢慢详细说明。

    73871

    C程序是如何跑起来01 —— 可执行文件构成

    程序如何执行? 一、编译环境搭建 ubuntu 20.04 使用 arm-linux-gnueabihf-gcc 7.5.0。...二、程序源码 main.c: #include #include "calc.h" int main(int argc, char *argv[]) { int a, b...在程序编译时候,对 C 语言代码定义函数、变量、未初始化全局变量进行编译分类,放置在不同: 普通代码翻译成二进制放到代码段(text) 常量放在只读数据段(rodata) 初始化全局变量和静态局部变量放在数据段...(data) BSS 段比较特殊,未初始化全局变量和静态变量都会放置到 bss 段,但因为这些变量值都是 0,没有必要再开辟空间存储,所以在可执行文件 bss 段是不占用空间。...但是 BSS 段大小、起始地址、各个变量地址信息都会分别保存在 section header table 符号表 symtab ,当程序运行时候,加载器会根据这些信息在内存紧挨着数据段之后空间

    75231

    过程(二)Sub过程定义调用

    一、定义Sub过程 在编写代码时,都要现在模块定义过程,通常都是输入sub 过程名称后回车,或者选择对象对应事件后,程序自动生成过程外部结构如下图所示: 定义过程有两种方法,一种是用窗体创建过程结构...Private:表示只有在包含其声明模块其他过程可以访问sub过程。(事件过程前会有Private关键字。)...3、每一个过程都必须对应一个名称通过过程名称可以调用该过程,过程名称命名需要符合标识符命名规则。...在VBA中经常通过调用定义好过程来执行程序,Sub过程调用分两种方式,一种是在VBA调用Sub过程,另一种是在Excel以调用宏方式, 1、使用VBA代码调用sub过程 在程序调用sub过程又两种方式...(以宏方式调用Sub过程无法给过程传递参数,所以通过宏只能调用无参数Sub过程。) ---- 本节主要介绍Sub过程定义调用,重点是Sub过程关键字注意点。下一节会介绍过程如何传递参数。

    5.3K20

    Linux之动态库和静态库

    动态库(.so):库文件以.so为后缀,程序在运行时才去链接动态库代码(运行时跳转到动态库,在动态库执行库函数)。多个程序共享库代码。 链接本质:我们调用库函数时是如何与标准库联系。...如果要链接第三方库,必须去指明库名称(注意:指明时要去掉前缀后缀!!!)...动态库是程序运行时才进行链接,而程序运行是OSshell来执行,因此OSshell也需要知道库文件路径及名称。...但是我们自己制作库并不在系统默认路径下,因此OS无法找到库,就无法正常执行程序。那么我们要如何让OS找到我们库呢? 我们可以将库路径添加到环境变量LD_LIBRARY_PATH。...通过起始地址偏移地址,就可以找到要调用库函数。

    52220

    详解动态库和静态库

    .c文件可形成一个.o文件,将这些.o文件链接形成可执行文件,头文件是一个手册,提供函数声明,告诉用户如何使用,.o文件提供实现,我们只需要补充一个main文件,调用头文件提供方法,然后.o文件进行连接...在main.c文件,就是使用" "来包含我所写头文件,但是还是会报错,理由:使用" "所包含头文件,会告诉编译器在main.c同级目录下(即test目录下)查找对应头文件,但是add.h、sub.h...注意:去掉前缀 lib 后缀 .a 才是一个库名称,建议 -l 后面紧跟库名称。...安装静态库 静态库安装本质上就拷贝到系统特定目录下。 卸载静态库 卸载静态库本质是将.h文件自己静态库从默认路劲删除,此时就无法通过静态库来运行程序。...LD_LIBRARY_PATH 环境变量,可以通过修改 ~/.bash_profile 配置去实现,但是不推荐这么写,不建议修改环境变量

    17610

    静态链接库动态链接库区别

    2、静态链接库下面就通过实际例子来向大家演示一下,该怎样编译使用静态动态链接库:2.1、编辑测试文件二个文件:add.c、 sub.c、add.h 、sub.h main.c/*add.h *...静态库制作完了,如何使用它内部函数呢?...在程序main.c,我们包含了静态库头文件add.hsub.h,然后在主程序main中直接调用公用函数add()sub()即可。2.5、生成目标程序main,然后运行....4.2、显加载示动态链接库实例在下面这个实例中将通过动态加载libmymath.so链接库,来调用add()sub()两个函数。...main.c -ldl-rdynamic选项以指定输出文件为动态链接方式-s指定删除目标文件符号表,-ldl则指示装配程序ld需要装载dl函数库。

    8.3K21

    总结了一些指针易出错常见问题(一)

    简介:计算机是如何从内存单元存取数据呢?从程序设计角度看,有两种办法:一是通过变量名;二是通过地址。...在变量分配内存空间同时,变量名也就成为了相应内存空间名称,在程序可以用这个名字访问该内存空间,表现在程序语句中就是通过变量名存取变量内容(这就是程序定义变量用途,即程序通过定义变量来实现数据在内存存取...如果知道了学生姓名,可以通过这个名字来访问该学生,这相当于使用变量访问数据。如果知道了房号,同样也可以访问该学生,这相当于通过地址访问数据。      ...指针变量就是具有指针类型变量,它是用于存放内存单元地址通过变量访问一个变量是直接,而通过指针访问一个变量是间接。...mallocfree函数分配释放动态内存。 Tips: 1.如何阅读指针声明,那就是倒过来读 const int *pci     // pci 是一个指向整数常量指针变量 ?

    86290

    C++初阶-入门基础语法

    二、namespacem命名空间 ---- 概念: 在C/C++变量、函数名称都大量存在于全局作用域中,可能会导致命名冲突 使用命名空间目的是对标识符名称进行本地化,以避免命名冲突或名字污染...using N::a; using N::Sub; int main() { printf("%d\n", a); printf("%d\n", Sub(a,N::b)); return 0;...符号表找Add地址,然后链接到一起 链接时,面对Add函数,连接器会根据编译器自己函数名修饰规则去找对应出现函数,而C/C++命名修饰是不同 示例:使用gcc演示修饰后函数名字 采用C...迭代对象要实现++==操作(现在只做了解) 十、指针空值nullptr ---- C++98指针空值 声明一个变量时最好给该变量一个合适初始值,否则可能会出现不可预料错误 指针没有合法指向初始化...程序本意是想通过f(NULL)调用指针版本f(int*)函数,但是由于NULL被定义成0,因此与程序初衷相悖 在C++98,字面常量0既可以是一个整形数字,也可以是无类型指针(void*)常量,

    70220

    CrashDumpInstallSym.sh

    在breakpad: Native crash 日志收集工具,详细介绍了breadpad使用流程,但是在实际操作过程,发现有如下问题需要解决: native崩溃堆栈Java层崩溃堆栈如何对应...pid=1 符号表需要放到特定文件结构才能解析。 针对于问题1,我已经解决,但目前不开源,大家可以去逆向看看腾讯实现。 针对于问题2,我已经编写shell脚本自动化解决。.../InstallSym.sh path/of/so_file [/path/of/symbol/] 传递so路径,即可生成对应符号表,并安装在合适目录下。 #!...-d $sub_dir ];then echo "create dir: ${sub_dir}" mkdir ${sub_dir} fi #2 echo "dump_syms $so_path...-d $sub_dir ];then echo "create dir: ${sub_dir}" mkdir ${sub_dir} fi #4 mv ${so_name}.sym ${symbol_path

    76450

    【Linux】静态库动态库

    制作静态库 (1)朴素方法 — 不打包 下面我们实现两个简单方法,加法减法计算方法,使用头文件源文件分开形式呈现出来,例如: 那么这一堆头文件源文件该如何形成一个静态库给别人使用呢?...注意,我们打包是没有 main 函数,我们也不能把 main 函数打入库。...我们不是将路径名称都告诉 gcc 了吗? 首先动态库是可执行程序库分离开,我们可执行程序加载到内存中了,但是库还没有加载到内存。...而我们在上面将路径名称都告诉了编译器,但是程序已经形成了,编译器工作周期已经结束了,接下来运行时候,编译器就没有关系了!...但是我们想做到让库在共享区任意位置,都可以正确运行呢? 下面我们先了解一下,我们动态库方法是如何编址,其实就是以 库名称+方法偏移量 来确定

    63310
    领券