$a=\$a;
Run Code Online (Sandbox Code Playgroud)
我正在阅读的这本书说在这种情况下$a永远不会是免费的,我的问题是为什么perl解释器在编译时没有修复它?当它发现它指向自身时,不要增加refcount.
为什么perl不这样做?
我们知道这个模块的功能是Dynamically load C libraries into Perl code.
但是它首先如何将自己的c库加载到Perl中?
我判断它应该有自己的c库,因为我没有在dl_load_file里面找到该函数DynaLoader.pm,所以它必须在某个c库中......
(gdb) disas func
Dump of assembler code for function func:
0x00000000004004b8 <func+0>: push %rbp
0x00000000004004b9 <func+1>: mov %rsp,%rbp
0x00000000004004bc <func+4>: movl $0x64,0xfffffffffffffff0(%rbp)
0x00000000004004c3 <func+11>: movb $0x61,0xfffffffffffffff4(%rbp)
0x00000000004004c7 <func+15>: mov 0xfffffffffffffff0(%rbp),%rax
0x00000000004004cb <func+19>: leaveq
0x00000000004004cc <func+20>: retq
End of assembler dump.
t_test func()
{
t_test t;
t.i = 100;
t.c = 'a';
return t;
}
Run Code Online (Sandbox Code Playgroud)
所以它似乎正在返回局部变量t,但这种工作是否有保证可以工作,是不是应该在返回时不引用任何局部变量?
以便将来一旦加载目标文件,断点就会生效。否则调试器几乎没有帮助......
main::(test.pl:7): Class->new->go;
DB<1> f Movie.pm
No file matching `Movie.pm' is loaded.
DB<2> b Movie.pm:10
Subroutine main::Movie not found.
Run Code Online (Sandbox Code Playgroud)
我知道Movie.pm将被加载并想在第 10 行设置一个 bp ......
谁知道这个全局变量是做什么的?
由于特殊字符,我无法通过谷歌找到任何信息.
UPDATE
[root@dev-test v2]$ perldoc -v '%^H'
Ending switch processing. Args are [%^H] with 0 errors.
/usr/bin/perldoc => Pod::Perldoc v3.14
Formatter class Pod::Perldoc::ToMan successfully loaded!
Will format with the class Pod::Perldoc::ToMan
Searching for %^H
Looking for %^H in /usr/bin /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 . /usr/kerberos/bin /usr/lib64/ccache /usr/local/bin /bin /usr/bin
No documentation found for "%^H".
Run Code Online (Sandbox Code Playgroud) sub t(&@) {
print @_;
}
t {print 1};
Run Code Online (Sandbox Code Playgroud)
我试图改变&@到&$,它就会失败.
什么是它的术语,以便我可以搜索?
my $a = {};
my $b = {$a=>''};
Run Code Online (Sandbox Code Playgroud)
我知道{}可以用来引用一个哈希键,但{}这里的意思是什么?