有没有理由说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。
有人可以解释字符串连接是否有用吗?
答案 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本身)转移到新工作。