perl是否与字符串中的TCLs expr等效

itj*_*itj 2 perl

我有一个编写html页面的脚本.

大部分内容都是固定的,所以我使用打印qq!在单个语句中输出格式良好的文本.

一些行需要一个变量+ 2嵌入其中,所以我最终预先计算了$ myVarplus2,这在一个案例中没问题.

my $myVarPlus2 = $myVar + 2;
Run Code Online (Sandbox Code Playgroud)

在TCL中我可以在语句中使用[expre $ myVar + 2].Perl有类似的概念吗?

这相当于我想做的事情

print qq!
$('td:nth-child(n)').show();!
$('td:nth-child([expr $myVar + 2])').removeClass('failCount');!
Run Code Online (Sandbox Code Playgroud)

我宁愿不打破声明

print qq!
$('td:nth-child(n)').show();!
$('td:nth-child(" . $myVar + 2 . qq!').removeClass('failCount');!
Run Code Online (Sandbox Code Playgroud)

但接受它可能是最简单的方法.

Kev*_* G. 7

一种方法,Perl字符串中的穷人模板:

print qq!
\$('td:nth-child(n)').show();
\$('td:nth-child(@{[ $myVar + 2 ]}).removeClass('failCount');!
Run Code Online (Sandbox Code Playgroud)

这取决于你自己的判断,你是否发现比破坏声明更具可读性,以及在什么时候它变得难以维护.

另一种方法是printf

printf q!
$('td:nth-child(n)').show();
$('td:nth-child(%s).removeClass('failCount');!, $myVar + 2;
Run Code Online (Sandbox Code Playgroud)

但除非这是一个简单的一次性项目,从长远来看,我认为你最好通过查看模板工具包,然后你可以像这样写你的输出

$template = q!
$('td:nth-child(n)').show();
$('td:nth-child([% myVar +2 %]).removeClass('failCount');!;
Run Code Online (Sandbox Code Playgroud)