国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

perl 語言中 AUTOLOAD 的用法

這篇具有很好參考價值的文章主要介紹了perl 語言中 AUTOLOAD 的用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里的 AUTOLOAD可以理解為自動加載。具體來說就是,在正常情況下,我們不能調(diào)用一個尚未定義的函數(shù)(子例程)。不過,如果在未定義函數(shù)的包中有一個名為 AUTOLOAD的函數(shù),那么對未定義函數(shù)的調(diào)用都會路由至這個 AUTOLOAD函數(shù),并且會為該函數(shù)提供相同的參數(shù)。因此,我們可以在 AUTOLOAD函數(shù)里面針對未定義的函數(shù)進行特殊處理,比如實現(xiàn)未定義的函數(shù),然后調(diào)用該函數(shù),就好像這個函數(shù)一直都存在一樣。

比如,下面的示例程序會在你調(diào)用未定義函數(shù)時發(fā)出警告,而不是直接退出:

#!/usr/bin/env perl

sub AUTOLOAD {
	our $AUTOLOAD;
	warn "You attempt to call an undefined function: $AUTOLOAD\n";
}

&foo; # $AUTOLOAD will be set to main::foo
print "Exit normally ...\n"

運行結果如下所示:

$ ./autoload.pl 
You attempt to call an undefined function: main::foo
Exit normally ...

下面是一個更加實用的例子,即我們在 AUTOLOAD中實現(xiàn)未定義的函數(shù):

#!/usr/bin/env perl

sub AUTOLOAD {
	my $name = our $AUTOLOAD;
	*$AUTOLOAD = sub { print "calling function $name(@_)\n"; };
	goto &$AUTOLOAD;
}

foo(30);
goo(40);
hoo(50);

運行結果如下所示:

$ ./autoload_2.pl 
calling function main::foo(30)
calling function main::goo(40)
calling function main::hoo(50)

OpenSSL項目中的很多地方都有用到 perl語言,它主要負責項目建構和匯編代碼的生成工作。其中,在生成加解密算法匯編優(yōu)化代碼的 perl腳本中,有很多架構都用到了 AUTOLOAD機制去簡化匯編指令的書寫。下面看一個 OpenSSLx86實現(xiàn)的例子,從 crypto/chacha/asm/chacha-x86_64.pl文件中節(jié)選出如下代碼:

#!/usr/bin/env perl

sub AUTOLOAD()          # thunk [simplified] 32-bit style perlasm
{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
  my $arg = pop;
    $arg = "\$$arg" if ($arg*1 eq $arg);
    $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
}

@x=("%eax","%ebx","%ecx","%edx",map("%r${_}d",(8..11)),
    "%nox","%nox","%nox","%nox",map("%r${_}d",(12..15)));
@t=("%esi","%edi");

sub ROUND {                     # critical path is 24 cycles per round
my ($a0,$b0,$c0,$d0)=@_;
my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
my ($xc,$xc_)=map("\"$_\"",@t);
my @x=map("\"$_\"",@x);

        (
        "&add   (@x[$a0],@x[$b0])",     # Q1
        "&xor   (@x[$d0],@x[$a0])",
        "&rol   (@x[$d0],16)",
         "&add  (@x[$a1],@x[$b1])",     # Q2
         "&xor  (@x[$d1],@x[$a1])",
         "&rol  (@x[$d1],16)",

        "&add   ($xc,@x[$d0])",
        "&xor   (@x[$b0],$xc)",
        "&rol   (@x[$b0],12)",
         "&add  ($xc_,@x[$d1])",
         "&xor  (@x[$b1],$xc_)",
         "&rol  (@x[$b1],12)",
		)
}

foreach (&ROUND(0, 4, 8,12)) { eval; }
foreach (&ROUND(0, 5,10,15)) { eval; }

print "$code\n";

從上面的代碼可以看到,表面上,add(),xor(),rol()這些函數(shù)并沒有被聲明和實現(xiàn),但該腳本定義了 AUTOLOAD函數(shù),并在 AUTOLOAD函數(shù)中進行了統(tǒng)一的處理,比如,將 &add(xx, yy)函數(shù)調(diào)用轉(zhuǎn)換為了 add yy,xx指令字符串。
因此,上述腳本的運行結果如下所示:文章來源地址http://www.zghlxwxcb.cn/news/detail-680666.html

$ ./autoload_3.pl 
	add	%r8d,%eax
	xor	%eax,%r12d
	rol	$16,%r12d
	add	%r9d,%ebx
	xor	%ebx,%r13d
	rol	$16,%r13d
	add	%r12d,%esi
	xor	%esi,%r8d
	rol	$12,%r8d
	add	%r13d,%edi
	xor	%edi,%r9d
	rol	$12,%r9d
	add	%r9d,%eax
	xor	%eax,%r15d
	rol	$16,%r15d
	add	%r10d,%ebx
	xor	%ebx,%r12d
	rol	$16,%r12d
	add	%r15d,%esi
	xor	%esi,%r9d
	rol	$12,%r9d
	add	%r12d,%edi
	xor	%edi,%r10d
	rol	$12,%r10d

到了這里,關于perl 語言中 AUTOLOAD 的用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • perl腳本語言學習1——基礎篇:變量、數(shù)組、哈希數(shù)組、循環(huán)、文件、函數(shù)

    2023.3.18 今天下載虛擬機把電腦磁盤內(nèi)容弄到亂七八糟,難受 發(fā)現(xiàn)每次學習遇到一個坎,感覺面前是一座大山,越過去之后又對前途充滿了希望 perl:practical extraction report language 實用提取和報表語言 從字面上看主要與文本處理相關 變量定義: my 存儲 數(shù)字、字符、字符

    2024年02月12日
    瀏覽(23)
  • 1762_gcc編譯c語言makefile自動生成工具的Perl實現(xiàn)

    1762_gcc編譯c語言makefile自動生成工具的Perl實現(xiàn)

    全部學習匯總: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and let\\\'s find an common way so we may don\\\'t need to touch makefile code any more! (github.com) ???????? 前陣子實現(xiàn)了一個CodeWarrior嵌入式開發(fā)環(huán)境的自動編譯環(huán)境,用的基本上是Python。說起來,我覺得那個環(huán)

    2024年02月12日
    瀏覽(21)
  • IIS perl python cbrother php腳本語言配置及簡單測試樣例程序

    IIS perl python cbrother php腳本語言配置及簡單測試樣例程序

    上篇筆記寫了 IIS 配置 CGI, IIS CGI配置和CGI程序FreeBasic, VB6, VC 簡單樣例_Mongnewer的博客-CSDN博客 這篇在IIS上配置一些腳本語言。為了操作方便,每種語言在站點下分設文件夾。 1. IIS perl配置 Perl CGI方式是曾經(jīng)流行的做法。先下載一個開源的 Perl.exe 解釋器,在免費的 sambar 服務器

    2024年02月09日
    瀏覽(14)
  • x-cmd pkg | perl - 具有強大的文本處理能力的通用腳本語言

    x-cmd pkg | perl - 具有強大的文本處理能力的通用腳本語言

    Perl 是一種動態(tài)弱類型編程語言。Perl 內(nèi)部集成了正則表達式的功能,以及巨大的第三方代碼庫 CPAN;在處理文本領域,是最有競爭力的一門編程語言之一 生態(tài)系統(tǒng) :綜合 Perl 檔案網(wǎng)絡 (CPAN) 提供了超過 25,000 個開源模塊。 跨平臺 :可以在不同的平臺上安裝和運行,例如 Windows,

    2024年01月24日
    瀏覽(24)
  • ThinkPHP5源碼閱讀-類的自動加載register與autoload的實現(xiàn)

    ThinkPHP5源碼閱讀-類的自動加載register與autoload的實現(xiàn)

    本文已收錄于PHP全棧系列專欄:PHP快速入門與實戰(zhàn) ThinkPHP是國內(nèi)最流行的一款PHP框架,是國人自主研發(fā)的框架,起源于2006年,經(jīng)過了十幾年的不斷發(fā)展。已經(jīng)成為了一款被PHP廣泛認可的性能開發(fā)效率兼具的利器。 閱讀框架源碼有助于我們更好的學習語言基礎,拓展設計模式

    2024年02月08日
    瀏覽(19)
  • mysql 安裝問題 perl(JSON) is needed by mysql-community-test

    執(zhí)行命令 :yum install perl-JSON 進行在線安裝即可解決

    2024年02月07日
    瀏覽(18)
  • 從0開始學OpenSSL 第一期:在VSCode中配置C語言調(diào)用OpenSSL

    從0開始學OpenSSL 第一期:在VSCode中配置C語言調(diào)用OpenSSL

    由于一些項目上的需要,我要在C語言中調(diào)用OpenSSL庫,本人并非0基礎,至少在上個學期學習了一門必修的程序設計(C語言)。 本人開發(fā)環(huán)境為: 系統(tǒng):Windows 11 開發(fā)工具: VScode + MinGW(GCC)v10.2.0 OpenSSL版本:Win64 OpenSSL v3.0.7 安裝 OpenSSL 由于編譯 OpenSSL 太麻煩了,這里我們直

    2024年02月05日
    瀏覽(117)
  • C語言---不依賴openssl的SHA算法

    //SHA1相關函數(shù)// typedef struct SHA1Context { uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest / uint32_t Length_Low; / Message length in bits / uint32_t Length_High; / Message length in bits / / Index into message block array / int_least16_t Message_Block_Index; uint8_t Message_Block[64]; / 512-bit message blocks / int Computed; / Is the di

    2024年01月21日
    瀏覽(18)
  • pip cryptography 遇到的 OpenSSL 問題

    pip cryptography 遇到的 OpenSSL 問題

    pip install -r requirements.txt 遇到 bug ? ? ? ? ? 一眼抓 OpenSSL,如果是Windows?64 位系統(tǒng),下載“Win64 OpenSSL”安裝程序。 Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions (slproweb.com) https://slproweb.com/products/Win32OpenSSL.html ? ? ? ? 直接安裝 openssl 安裝包是最快捷方便的方法

    2024年02月09日
    瀏覽(16)
  • intel SGX學習筆記(10):SGX項目openssl在App和Encalve中使用的配置問題和openssl庫的路徑配置問題

    intel SGX學習筆記(10):SGX項目openssl在App和Encalve中使用的配置問題和openssl庫的路徑配置問題

    我在初學SGX項目中,在安全區(qū)和非安全區(qū)下載和引入openssl庫的時候會遇到各種各樣的問題,稀奇古怪的,尤其是openssl的路徑問題和make指令編譯出現(xiàn)的問題,自己也做了幾天的嘗試解決,下面是我做出的一些解決方法,最終還是解決問題了,不對的地方請大家指點!??! 1、

    2024年01月23日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包