文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Perl 语言全面编译(四)

Perl 语言全面编译(四)

时间:2005-04-19  来源:一郎

第六节 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 <<html;#直接输出 <br="" />Content-type: text/html

$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里面,那么势必对于程序运行资源造成极大浪费,而且得不偿失,影响效率。这样做成一个函数或者对象,对会有不通用的问题。
所以建立一个灵活的分析方法,对于模板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+)/; #替换网页的变量,批量处理,寻找“*”(*)标记
$tmp = $1; #把寻找到的“*”标记以及其本身量名称复制给$tmp
$_ =~ s/*$tmp/$Html{"$tmp"}/g; #替换*$tmp内容成为%HTML哈希对应值
print "$_";
}
}
分析模板的函数PHF:
#!perl
%Html (Var=> HelloWorld) ;#设置HTML文件的值
PHF("../Helloworld.html ") ;#启动PHF函数
这样就大功告成了,是不是比原来简单了很多呢?而且你可以更加容易的配置你的HTML 内的量与现实的量化分开来。这样你在编译Perl程序的时候可以节省很多事情。特别在用Perlcc 的时候。
相关阅读 更多 +
排行榜 更多 +
ooxe官方版下载

ooxe官方版下载

金融理财 下载
ooxe

ooxe

金融理财 下载
OXE交易app安卓版下载

OXE交易app安卓版下载

金融理财 下载