perl CGI.pm:列出vs构建页面的字符串

时间:2015-02-16 01:49:35

标签: perl cgi.pm

有没有理由说CGI.pm示例依赖于列表连接而不是字符串连接?这两个是可以互换的吗?认为

print q->hidden(-name =>'rm', -value => $var).
      q->submit(-name =>"rm$var");

VS

print q->hidden(-name =>'rm', -value => $var),
      q->submit(-name =>"rm$var");

我有特别的理由要求。从字符串构建页面非常方便。毕竟,perl将标量字符串理解为基本类型。

但是,我对字符串concat上下文中的一些奇怪行为感到非常困惑。具体来说,我偶尔会遇到隐藏的$ var与提交按钮中的$ var不同的情况。我可以解决这个问题,但我宁愿理解CGI.pm。

有人可以解释字符串连接是否有用吗?

2 个答案:

答案 0 :(得分:3)

除非您更改$,的默认值,

print EXPR1, EXPR2;

print EXPR1 . EXPR2;
如果表达式不是特定于上下文,则

产生相同的结果。有问题的函数总是返回一个HTML字符串,所以你很好。

答案 1 :(得分:3)

你是对的,这两个例子具有相同的效果(好吧,as ikegami says,除非你改变了$,)。唯一的区别当然是,在第一个例子中,print传递一个字符串,而在第二个例子中,它得到两个。

但您是否在最新版本的CGI.pm文档中阅读了comments about the HTML generation functions

  

CGI.pm中的所有HTML生成函数都不再存在   保持。除非他们,否则任何问题,错误或补丁都将被拒绝   与基本破坏的页面渲染有关。

     

这个的基本原理是CGI.pm的HTML生成功能   最好是混淆,最糟糕的是维护噩梦。您   应该使用模板引擎来更好地分离关注点。   有关使用CGI.pm的示例,请参阅CGI :: Alternatives   Template :: Toolkit模块。

     

这些函数和perldoc将继续存在于   v4版本的CGI.pm但可能在v5及更高版本中被弃用(软)。

我会认真考虑从这些功能(实际上是CGI.pm本身)转移到新工作。