楊曉凱
溫州醫(yī)科大學(xué)溫州市第三臨床學(xué)院/溫州市人民醫(yī)院
【摘要】目的 基于混合編程技術(shù)柏锄,使用Lazarus和Perl語言等設(shè)計開發(fā)文獻管理系統(tǒng)酿箭,滿足科技管理人員的工作需求。方法 調(diào)查分析三大中文數(shù)據(jù)庫(CNKI趾娃、萬方數(shù)據(jù)庫和維普數(shù)據(jù)庫)中的導(dǎo)出格式和著錄項目內(nèi)容缭嫡,選用著錄項目較多的NoteExpress格式作為擬轉(zhuǎn)換格式,按照GB/T 7714-2015.信息與文獻.參考文獻著錄規(guī)則建立和BibTex格式的對應(yīng)關(guān)系抬闷,以BibTex作為最終格式和中間格式妇蛀,實現(xiàn)和Endnote格式的相互轉(zhuǎn)換。使用Perl語言實現(xiàn)數(shù)據(jù)下載笤成、提取评架、分析和格式轉(zhuǎn)換功能,使用Lazarus實現(xiàn)界面開發(fā)疹启。結(jié)論 基于混合編程技術(shù)的文獻管理系統(tǒng)開發(fā)古程,利用了Lazarus快速界面開發(fā)和perl語言快捷文本處理的優(yōu)勢,能夠提高程序開發(fā)效率喊崖,實現(xiàn)任務(wù)目標挣磨。
【關(guān)鍵詞】混合編程;文獻管理荤懂;Lazarus岖免;Perl扎即;BibTex; Endnote
作者單位:325000 浙江省溫州市,溫州市人民醫(yī)院
[作者簡介] 楊曉凱(1973-),男(漢族)香缺,浙江省溫州市人再菊,碩士族奢,主任醫(yī)師懈玻。
*通訊作者,Email:yakeworld@126.com
背景
文獻管理軟件的功能包括文獻信息的收集箭启、文獻信息的整理和組織壕翩、論文中對文獻引用的插入和參考書目的生成。對于科技管理人員傅寡,還需要其他功能包括批量文獻數(shù)據(jù)采集放妈,文獻數(shù)據(jù)合并北救,文獻統(tǒng)計分析,文獻數(shù)據(jù)導(dǎo)出和發(fā)布等芜抒。
目前通用的文獻管理軟件比較多珍策,商業(yè)性軟件包括EndNote、Reference Manager宅倒、ProCite攘宙、RefWorks、NoteExpress唉堪、NoteFirst模聋、Citavi肩民、醫(yī)學(xué)文獻王唠亚,免費軟件包括知網(wǎng)研學(xué)、Zotero持痰、Mendeley灶搜、JabRef等[1]。
但這些軟件主要面向的對象為科技工作者工窍,其功能包括個人知識管理割卖、論文寫作、構(gòu)建專題數(shù)據(jù)庫患雏、科技查新鹏溯、編輯工作等,還不能滿足科技管理人員的工作需求淹仑。所以有必要開發(fā)系統(tǒng)實現(xiàn)相關(guān)功能丙挽。
文獻數(shù)據(jù)采集
三大中文數(shù)據(jù)庫(CNKI、萬方數(shù)據(jù)庫和維普數(shù)據(jù)庫)支持導(dǎo)出各種格式參考文獻匀借,但著錄項目內(nèi)容范圍并不一致颜阐,缺乏規(guī)范。CNKI支持導(dǎo)出知網(wǎng)研學(xué)吓肋、Refworks凳怨、EndNote、NoteExpress是鬼、NoteFirst及自定義格式肤舞,各種格式的內(nèi)容范圍各不一致。萬方同樣支持導(dǎo)出各種格式均蜜,包括Refworks李剖、EndNote、NoteExpress兆龙、NoteFirst杖爽、Bibtex格式及自定義格式敲董,但內(nèi)容范圍也不一致。維普支持導(dǎo)出格式較少慰安,僅包括ENDNOTE腋寨、NoteExpress和自定義格式。各種文獻導(dǎo)出格式化焕,大都服務(wù)于常規(guī)文獻管理萄窜,著錄項目內(nèi)容有限,其中著錄項目較多為NoteExpress格式撒桨〔榭蹋可以通過不同格式合并或者檢索和文摘頁碼進一步提取信息。
著錄項目格式
不同的參考文獻管理軟件凤类,其使用的文獻數(shù)據(jù)保存格式并不相同穗泵。Endnote軟件由Thomson Reuters公司開發(fā),是最好的文獻管理工具之一谜疤,其文件格式常被選用為中間格式用于轉(zhuǎn)換成其他格式佃延。但是Endnote格式著錄項目只有52項,其中8項可以用于自定義其他內(nèi)容夷磕,其他均有特指履肃,這對于常規(guī)文獻管理是足夠的,但是對于科技管理文獻分析是不夠的坐桩,不能記錄其他更加詳盡的著錄項目尺棋。
LaTeX 是國際學(xué)術(shù)界最流行的排版系統(tǒng)之一,其使用BibTex來引用文獻绵跷。BibTex由Oren Patashnik在1988年開發(fā)膘螟,其對文獻類型和著錄項目的定義和推薦已是事實上的標準[2]。雖然BibTex有規(guī)定其標準文獻類型和著錄項目[2]抖坪,但由于其格式的開發(fā)性萍鲸,根據(jù)需要,BibTex可以對文獻類型和著錄項目進行擴充擦俐,以滿足GB/T 7714-2015信息與文獻.參考文獻著錄規(guī)則等需求[3]脊阴。
由于文獻管理軟件眾多,并使用不同的格式管理文件蚯瞧,其著錄項目名稱和范圍各有不同嘿期,難以在各種格式之間直接進行轉(zhuǎn)換,通常是先轉(zhuǎn)成中間格式再進行轉(zhuǎn)換埋合。
EnoNote格式由于使用較為普遍备徐,是較常采用的中間格式,但其著錄項目只有52項甚颂,限制了應(yīng)用范圍蜜猾。
BibTex格式著錄項目名稱直觀秀菱,能夠自由擴充著錄項目,是較好的中間格式蹭睡,前提是要建立和其他格式的對應(yīng)關(guān)系衍菱。
格式轉(zhuǎn)換
國內(nèi)有文獻報道文獻著錄項目格式的轉(zhuǎn)換和導(dǎo)入。江占勇開發(fā)的CvtCNKI可以將中國期刊網(wǎng)(CNKI)等國內(nèi)數(shù)據(jù)庫提供的不規(guī)則文獻著錄項目信息轉(zhuǎn)換為標準格式肩豁,以便導(dǎo)入到EndNote等文獻管理工具[4]脊串。2010年, 李安邦等開發(fā)的Cvt Enw軟件使用JavaScript腳本程序從三大中文數(shù)據(jù)庫網(wǎng)頁中抓取文獻著錄項目信息生產(chǎn)Endnote格式[4]清钥。目前三大中文數(shù)據(jù)庫已經(jīng)支持導(dǎo)出各種格式參考文獻以滿足導(dǎo)入各種參考文獻管理文件的需求琼锋。存在的問題是著錄項目內(nèi)容不能滿足科技管理需求,格式轉(zhuǎn)換的需求依然存在祟昭。
以BibTex作為中間格式缕坎,實現(xiàn)各種參考文獻格式轉(zhuǎn)換,需要根據(jù)GB/T 7714-2015規(guī)范要求和科技管理需要擴充和規(guī)范BibTex著錄文獻類型和著錄項目从橘,在此基礎(chǔ)上建立和各種參考文獻格式的對應(yīng)關(guān)系念赶,無法直接對應(yīng)的可再次擴充BibTex格式础钠。
文獻類型分析
BibTex中標準文獻類型包括期刊的析出文獻(article)恰力,普通圖書(book),圖書的析出文獻(incollection)旗吁,會議錄的析出文獻(inproceedings 或 conference)踩萎,學(xué)位論文(mastersthesis 或 phdthesis),會議錄(proceedings)很钓,報告(techreport)香府,其他(misc)[2],這些在GB/T 7714-2015中有直接對應(yīng)码倦。
除此之外企孩,GB/T 7714-2015中有而BibTex中不屬于標準文獻類型的包括:檔案(archive),匯編(collection)袁稽,數(shù)據(jù)庫(database)勿璃,數(shù)據(jù)集(dataset),輿圖(map)推汽,報紙(newspaper)补疑,電子公告(online),專利(patent)歹撒,計算機程序(software)莲组,標準(standard);BibTex中屬于標準類型而GB/T 7714-2015沒有直接對應(yīng)的有:小冊子(booklet)暖夭,書籍部分(inbook)锹杈,技術(shù)手冊(manual)撵孤,未出版文檔(unplublished)。
著錄項目分析
不同文獻類型的著錄項目信息范圍有所不同竭望≡缰保《GB/T 7714-2015.信息與文獻.參考文獻著錄規(guī)則》規(guī)定了各個學(xué)科、各種類型信息資源的參考文獻的著錄項目市框、著錄順序霞扬、著錄用符號、著錄用文字枫振、各個著錄項目的著錄方法以及參考文獻在正文中的標注法喻圃。但標準適用于著者和編輯著錄參考文獻,而不是供圖書館員粪滤、文獻目錄編制者以及索引編輯者使用的文獻著錄規(guī)則[5][6]斧拍。
基于寫作的文獻管理需要的期刊著錄項目信息包括主要責(zé)任者(author),題名(title)杖小,期刊題名(journal)肆汹,出版年(year),卷(volume)予权,期(number)昂勉,引文頁碼(pages),以及數(shù)字對象唯一標識符(doi)扫腺。不同文獻類型的著錄項目信息范圍有所不同岗照,需要按照GB/T 7714-2015參考文獻著錄規(guī)則。
BibTex中著錄項目包括出版地(address)笆环, 主要責(zé)任者(author)攒至, 圖書題名(booktitle), 版本(edition)躁劣, 機構(gòu)(用于techreport)(institution)迫吐, 期刊題名(journal), 拼音(用于排序)(key)账忘, 期(或者專利號)(number)志膀, 組織(用于會議)(organization), 引文頁碼(pages)闪萄, 出版者(publisher)梧却, 學(xué)校(用于phdthesis)(school), 系列(series)败去, 題名(title)放航, 卷(volume), 出版年(year)圆裕, 這些在GB/T 7714-2015中有直接對應(yīng)[5][2][3]广鳍。
除此之外荆几,GB/T 7714-2015中有而BibTex中不屬于標準著錄項目的包括:更新或修改日期(date),數(shù)字對象唯一標識符(doi)赊时,編輯(editor)吨铸,語言(language),文獻類型標識(mark)祖秒,載體類型標識(medium)诞吱,翻譯者(translator),獲取和訪問路徑(url)竭缝,引用日期(urldate)房维;BibTex中屬于標準著錄項目而GB/T 7714-2015沒有直接對應(yīng)的有:注解(annote),章(chapter)抬纸,交叉引用關(guān)鍵詞(crossref)咙俩,出版方式(howpublished),月(month)湿故,筆記(note)阿趁,類型(type)[5][2][3]。
LaTeX的自帶參考文獻宏包natbib還擴充支持ISBN坛猪、ISSN脖阵、URL、DOI砚哆、EID著錄項目[7]独撇。gbt7714宏包[3]能夠支持GB/T 7714—2015標準,不支持的 BibTeX 標準著錄項目有 annote, chapter, crossref, month, type躁锁,也不支持ISBN、ISSN卵史、EID战转。
對于科技管理工作,要求的著錄項目信息范圍較廣以躯,以滿足和實現(xiàn)管理和統(tǒng)計功能槐秧。比如,醫(yī)院學(xué)科建設(shè)情況匯總要求上報的論文信息除了論文題目忧设、刊物名稱刁标、期刊名稱、年份址晕、卷膀懈、期、頁谨垃、所有作者启搂,還包括發(fā)表時間硼控、是否SCI、排名胳赌、索引情況牢撼、影響因子、被引用次數(shù)疑苫、通訊作者熏版。不僅如此,醫(yī)院科研管理工作捍掺,還需要分析作者的科室部門纳决,期刊等級,是否本院論文(作者單位本院排列第一)乡小,是否屬于論著阔加。
開發(fā)語言選擇
文獻數(shù)據(jù)的采集分析和格式轉(zhuǎn)換,需要操作文本進行正則分析满钟。Perl語言很容易操作文本胜榔,其內(nèi)置的正則表達式利于分析提取數(shù)據(jù),其哈希結(jié)構(gòu)適合建立著錄項目對應(yīng)關(guān)系湃番。Perl6 相對于 Perl5 做了革命性的改革夭织,擁有豐富的語言特征、支持多線程吠撮、正則表達式更加靈活尊惰,在字符處理方面更加輕便。最終實現(xiàn)的文獻管理系統(tǒng)要使用BibTex格式進行文獻管理泥兰,并進行各種格式的轉(zhuǎn)換和生產(chǎn)各種報表弄屡,需要良好的用戶操作界面。Perl雖然也支持圖形界面編程鞋诗,但實現(xiàn)復(fù)雜功能較繁瑣膀捷。Lazarus是一個開源免費的快速應(yīng)用開發(fā)工具,是面向?qū)ο蟮?Pascal 集成開發(fā)環(huán)境削彬,具備很強的圖形界面開發(fā)功能全庸,具備快速簡單方便等特點∪谕矗可以通過TProcess調(diào)用perl編譯的外部程序?qū)崿F(xiàn)功能整合壶笼。
技術(shù)結(jié)構(gòu)
選擇BibTex作為中間格式,確保文獻信息不丟失以便轉(zhuǎn)換成其他格式雁刷。首先建立NoteExpress格式到BibTex格式的轉(zhuǎn)換對應(yīng)關(guān)系以實現(xiàn)將采集的文獻數(shù)據(jù)轉(zhuǎn)換成BibTex格式(表1覆劈、2)。然后將EndNote等格式和BibTex格式建立明確對應(yīng)關(guān)系以實現(xiàn)格式之間的相互轉(zhuǎn)換[8][9](表1、3)墩崩。
在先前的項目中我們曾用Perl語言實現(xiàn)格式的轉(zhuǎn)換[10]氓英。但是用Raku語言來實現(xiàn)其代碼更加簡潔,Grammar特性還可以封裝復(fù)雜的正則表達式鹦筹,邏輯更加清晰铝阐。
所實現(xiàn)的功能包括:NoteExpress和BibTex格式相互轉(zhuǎn)換,Endnote和BibTex格式相互轉(zhuǎn)換铐拐,Endnote和NoteExpress格式相互轉(zhuǎn)換徘键,以及各種格式導(dǎo)出為參考文獻格式、網(wǎng)頁格式和Excel格式等遍蟋。網(wǎng)頁文件使用了jQuery表格插件dataTables吹害,支持檢索、篩選等交互功能虚青。
使用 Grammars 解析BibTex格式
grammar Bib {
regex TOP { <prefix>? <bib>+ % \n}
regex prefix {<-[\@]>+}
regex bib { \@<type>\{\,\n<bibkv>+\}\n}
regex type {<-[\{]>+}
regex bibkv {\s*<key>\s*\=\s*\{<value>\}\,*\n}
regex key {<-[\{]>+?}
regex value {<-[\{]>+}
};
my $content=$file_bib.IO.slurp;
Bib.parse($content);
say $/;
界面框架使用Lazarus來開發(fā)它呀,可以快速生成菜單,并支持快捷鍵調(diào)用Perl程序功能(圖1)棒厘。Lazarus使用的Pascal語言語法簡單纵穿,調(diào)用外部程序關(guān)鍵代碼:
var
AProcess: TProcess;
begin
AProcess := TProcess.Create(nil);
AProcess.Executable:= PerlFileName;
AProcess.Parameters.Add('bib_to_endnote');
AProcess.Parameters.Add(BibFileName);
AProcess.Parameters.Add(BibFileName+'.enw');
AProcess.Options := AProcess.Options + [poWaitOnExit,poNoConsole];
AProcess.Execute;
AProcess.Free;
end;
表1 NoteExpress、BibTex和Endnote格式著錄項目對應(yīng)關(guān)系
NoteExpress | BibTex | Endnote |
---|---|---|
URL | url | %U |
Corporate Author | reviewed_item | %* |
Tertiary Author | tertiary_author | Nill |
GCH | call_number | %L |
Keywords | keywords | %K |
JumpPage | jumppage | %] |
Place Published | address | %C |
Type of Work | type | %9 |
Pages | pages | %P |
Subsidiary Author | subsidiary_author | %? |
Translated Journal | translated_journal | %2 |
Translated Abstract | translated_abstract | %3 |
Volume | volume | %V |
Database Provider | database | %W |
Vol | volume | %V |
Translated Author | translated_author | %H |
Year | year | %D |
Tertiary Title | tertiary_title | %S |
Issue | number | %N |
Language | language | %G |
Title | title | %T |
BeginPage | beginpage | %# |
Translated Title | translated_title | %Q |
Translated Keywords | translated_keywords | %4 |
Date | date | %8 |
Journal | journal | %J |
Subsidiary Author, | subsidiary_author | %? |
ISBN/ISSN | issn | %@ |
Data | year | %D |
Author | author | %A |
EndPage | endpage | %$ |
Publisher | author_address | %+ |
Num | number | %N |
Name | journal | %J |
year | year | %D |
Reference Type | mark | %0 |
Abstract | abstract | %X |
BookID | accession_number | %M |
DOI | doi | %R |
Secondary Title | secondary_title | %B |
Notes | cn | %= |
Author Address | author_address | %+ |
Publisher | publisher | %I |
Nill | file | %> |
Nill | level | %1 |
Nill | notes | %Z |
Nill | editor | %E |
Nill | section | %& |
Nill | urldate | %[ |
Nill | class | %< |
Nill | short_title | %! |
Nill | tertiary_author | %Y |
Nill | edition | %7 |
Nill | department | %~ |
Nill | alternate_title | %O |
Nill | reprint_edition | %) |
Nill | original_publication | %( |
Nill | label | %F |
Nill | caption | %^ |
Nill | volumes_number | %6 |
表2 Noteexpress和BibTex文獻類型對應(yīng)關(guān)系
Noteexpress | BibTex |
---|---|
Book | book |
Paten | patent |
Legal Rule or Regulation | misc |
Journal Article | article |
Conference Proceedings | conference |
Thesis | phdthesis |
Newspaper Article | article |
Other Article | misc |
表3 Endnote和BibTex文獻類型對應(yīng)關(guān)系
Endnote | BibTex |
---|---|
Conference Paper | inproceedings |
Conference Proceedings | proceedings |
Journal Article | article |
Paten | patent |
Electronic Book | book |
Newspaper Article | article |
Unpublished Work | unpublished |
Electronic Article | article |
Book Section | incollection |
Magazine Article | article |
Book | book |
Thesis | phdthesis |
Edited Book | book |
圖 1 軟件GUI界面
討論
混合編程是指使用兩種或兩種以上的程序設(shè)計語言來開發(fā)應(yīng)用程序的過程奢人。
自1954年美國約翰·貝克斯(John Backus)創(chuàng)造出了第一個高級語言Fortran語言谓媒,新的編程語言開始不斷涌現(xiàn)。至今為止何乎,編程語言已經(jīng)達到600多種句惯,但流行的程序設(shè)計語言最多二三十種,它們有各自的特點和擅長領(lǐng)域支救。
Pascal語言由瑞士Niklaus Wirth教授于六十年代末設(shè)計并創(chuàng)立抢野,具有語法嚴謹、層次分明等特點搂妻,是第一個結(jié)構(gòu)化編程語言蒙保,被稱為“編程語言里一個重要的里程碑”。
Perl語言由拉里·沃爾(Larry Wall)于1987年12月18日發(fā)表欲主。Perl是第一種后現(xiàn)代編程語言[11],最重要的特性是它內(nèi)部集成了正則表達式的功能逝嚎,以及巨大的第三方代碼庫CPAN扁瓢,像C一樣強大,像awk补君、sed等腳本描述語言一樣方便引几,即可以把簡單工作簡單化,同時又不失去處理困難問題能力。2015年12月25日伟桅,開發(fā)了十多年的Perl 6語言在圣誕節(jié)正式發(fā)布敞掘,并于2019年10月改名為Raku,以便于和Perl 5區(qū)分楣铁。
混合編程可以充分利用各種程序設(shè)計語言的優(yōu)勢玖雁,并被廣泛應(yīng)用各種各種場景,是未來編程的一個趨勢盖腕。比如python語言涉及大量運算的時候總是調(diào)用C語言來實現(xiàn)赫冬。Perl 6使用Nativecall可以很方面執(zhí)行C語言代碼,還可以使用Inline::Python使用python生態(tài)和Inline::Perl使用Perl 5生態(tài)溃列。
文獻管理的主要工作是文本分析劲厌,這是perl語言最擅長的領(lǐng)域。Perl是Larry為了格式化處理文本而創(chuàng)建的听隐,其中最重要的特性是它內(nèi)部集成了正則表達式的功能补鼻,以及巨大的第三方代碼庫CPAN。Perl 6同樣繼承了Perl 5語言的優(yōu)點雅任。
文獻管理任務(wù)需要菜單交互操作风范,對于終端用戶,界面開發(fā)十分重要椿访。Perl也支持界面開發(fā)乌企,比如文獻采集系統(tǒng)就是用Perl語言加Tk模塊開發(fā)的,輸入欄目可以用編程快速生成成玫,但不適合建立復(fù)雜的GUI界面加酵。
Delphi是Windows平臺下著名的快速應(yīng)用程序開發(fā)工具,其可視化編程環(huán)境可以快速生成具備優(yōu)美界面的程序框架哭当。Lazarus 與 Delphi 高度兼容,并被視作后者的開源替代品猪腕,能運行于Linux,Win32和Mac OS钦勘。Lazarus的編程語言是以Pascal為基礎(chǔ)的陋葡。事實證明,Lazarus開發(fā)文獻管理系統(tǒng)界面非常簡便彻采,而且軟件界面支持快捷鍵操作菜單腐缤,通過TProcess可以極方便調(diào)用外部程序。Perl 程序可以直接調(diào)用肛响,也可以使用pp模塊進行編譯和打包邮破,適合調(diào)用完成復(fù)雜任務(wù)嫁审。如果需要保護源代碼购笆,可以使用PAR::Filter::Crypto 模塊進行代碼加密拢切。系統(tǒng)還采用HTML文件作為文獻報告格式,其內(nèi)部的JavaScript語言能夠完成復(fù)雜檢索,適合網(wǎng)絡(luò)發(fā)布虎囚。也能夠以Excel格式生成報表角塑。Lazarus具備“一次編寫,到處編譯”的特性淘讥,不需要重新編碼就可以為不同的平臺開發(fā)相同的產(chǎn)品圃伶,Perl語言也具備跨平臺特性。
結(jié)論
基于混合編程技術(shù)的文獻管理系統(tǒng)開發(fā)适揉,利用了Lazarus快速界面開發(fā)和perl語言快捷文本處理的優(yōu)勢留攒,能夠提高程序開發(fā)效率,實現(xiàn)任務(wù)目標嫉嘀。
參考文獻
-
張穎,劉敏.文獻管理軟件研究現(xiàn)狀與對策分析[J].情報探索,2014(11):8-12. ?
-
Oren Patashnik.BiB-TEXing[EB/OL].http://www.openoffice.org/bibliographic/btxdoc.html,1988-02-28/2020-02-18 ? ? ? ? ?
-
Zeping Lee.GB/T 7714-2015 BibTEX style[EB/OL].http://mirrors.hust.edu.cn/CTAN/biblio/bibtex/contrib/gbt7714/gbt7714.pdf,2019-11-20/2020-02-18. ? ? ? ?
-
李安邦,蔣效會.CvtEnw:中文文獻著錄項目直接導(dǎo)出到文獻管理軟件[J].現(xiàn)代情報,2010,30(09):160-162. ? ?
-
中國國家標準化委員會.信息與文獻參考文獻著錄規(guī)則:GB/T 7714—2015[S].北京:中國標準出版社,2015. ? ? ?
-
文榕生. 新版參考文獻著錄規(guī)則求疵[J]. 山東圖書館學(xué)刊,2019(03):7-18. ?
-
Patrick W. Daly.Natural Sciences Citations and References[EB/OL].https://mirrors.tuna.tsinghua.edu.cn/CTAN/macros/latex/contrib/natbib/natbib.pdf,2010-09-14/2020-02-18. ?
-
Dominik Benz, Andreas Hotho, Robert J?schke,etc. The social bookmark and publication management system bibsonomy[J]. Vldb Journal, 19(6):849-875. ?
-
https://github.com/JabRef/EndNode-JabRef-filters,2020-02-18 ?
-
楊曉凱.醫(yī)院科研論文的自動化采集炼邀、分析和管理[J].醫(yī)院管理論壇,2014,31(05):45-47+21. ?
-
Larry Wall.Perl, the first postmodern computer language[EB/OL].https://www.perl.com/pub/1999/03/pm.html/,1999-06-09/2020-02-18. ?