Perl Mason中的Switch-Case语法
我正在寻找Mason中的switch-case语法,但还没有找到 有人能帮我拿一个样品吗Perl Mason中的Switch-Case语法,perl,switch-statement,mason,Perl,Switch Statement,Mason,我正在寻找Mason中的switch-case语法,但还没有找到 有人能帮我拿一个样品吗 提前感谢。Perl直到最近才有switch/case语句 您可以使用该模块 或者使用Perl5.10中提供的Perl6 例如: use v5.10.1; given ($var) { when (/^abc/) { $abc = 1 } when (/^def/) { $def = 1 } when (/^xyz/) { $xyz = 1 } default {
提前感谢。Perl直到最近才有switch/case语句 您可以使用该模块 或者使用Perl5.10中提供的Perl6 例如:
use v5.10.1;
given ($var) {
when (/^abc/) { $abc = 1 }
when (/^def/) { $def = 1 }
when (/^xyz/) { $xyz = 1 }
default { $nothing = 1 }
}
Saket,以下在我的Mason系统上运行良好。它是
HTML::Mason
ver。1.48在Perl 5.14和Apache 2.2.22上运行
在Perl5.10.1
之后提供了类似开关的语句,(),Matteo的另一篇文章已经指出了这一点
test.html
(如果服务器配置需要,请重命名为test.mas
)
但是,对于只依赖于固定键的开关来说,最简单的“等价物”当然是%hash
:
<html>
<head></head>
<body>
% my $name = 'Wittig';
<h3>Hello <% $name %>! Ist this your <% $NameSword{$name} %>?</h3>
</body>
</html>
<%once>
my %NameSword = (
Luno => 'Fingal',
Ecke => 'Eckesax',
Artus => 'Excalibur',
Wittig => 'Mimung',
Ortnit => 'Rosen',
Sigurd => 'Gram',
Siegmund => 'Notung',
Siegfried => 'Balmung',
Dietrich => 'Nagelring'
);
</%once>
%我的$name='Wittig';
你好这是你的吗?
我的%NameSword=(
Luno=>Fingal,
Ecke=>“Eckesax”,
Artus=>“神剑”,
Wittig=>“Mimung”,
Ortnit=>“Rosen”,
Sigurd=>Gram,
Siegmund=>Notung,
齐格弗里德=>巴尔芒,
迪特里希=>'Nagelring'
);
这三种变体产生相同的输出。可能是我把剑的名字弄混了(必要时会更正)。如果您想用Perl编写一个switch语句,请将#switch$var
放在逻辑块的开头。这只是表示您只打算对一个变量执行逻辑。对于每种情况后中断的典型情况,可以使用if-elsif-else
block
$var = 3;
# switch $var
if ($var == 1) {print "one\n"; }
elsif($var == 2) {print "two\n"; }
elsif($var == 3) {print "three\n"; }
elsif($var == 4) {print "four\n"; }
else {print "didn't get it\n"; } #default
如果您打算使用fall-through和default,那么它会更复杂、更慢
$var = 3;
$got = 0;
# switch $var
if ($var == 1) {print "one\n"; ++$got;}
if ($var == 2) {print "two\n"; ++$got;}
if ($var == 3) {print "three\n"; ++$got;}
if ($var == 3
|| $var == 4) {print "three or four\n"; ++$got} #fall-through
unless ($got) {print "didn't get it\n"; } #default
在Perl 5.10.1上,given/when对我来说很好。下面是我用来测试的示例组件:
% my $value=2;
% given ($value) {
% when (1) {
<h1>It is one, dear</h1>
% }
% when (2) {
<h2>Level two</h2>
% }
% }
%
<%once>
use v5.10.1;
</%once>
%my$value=2;
%给定值($value){
%何时(1){
是一个,亲爱的
% }
%何时(2){
二级
% }
% }
%
使用v5.10.1;
如果我将$value设置为1,则得到h1部分;将其设置为2将得到h2部分。我相信这是纯Perl代码的结果,而不是mason。我试着用在梅森身上,但没有成功。你会有一个梅森样本,但是你可以在HTML中嵌入Perl代码。您可以在
部分中使用switch语句。你也许应该编辑你的问题,并举例说明你想做什么。是的,这就是我正在做的……但看起来mason不太理解“use”语句,因此也不太理解switch语法fails@Saket如果您提供了错误消息以及导致错误的代码的上下文,我们可以帮助诊断梅森错误。现在我面前有大量的mason代码,如果您的“使用”状态不在专门针对perl代码的块中(init shared、perl等),那么是的,mason在读取它时会吐在上面。我主要将我的文件放在%init中,但我也在%filter块中有一个。Switch.pm是Perl 5.8.0引入的。它已从Perl 5.14中删除。应该改用given/when(由Perl 5.10.0引入)。given/when语句用于替换Switch.pm。Switch.pm是源过滤器,因此不建议用于生产代码。Switch.pm已从Perl 5.14的标准Perl发行版中删除。您仍然可以从CPAN获得它,但建议您不要这样做。
$var = 3;
# switch $var
if ($var == 1) {print "one\n"; }
elsif($var == 2) {print "two\n"; }
elsif($var == 3) {print "three\n"; }
elsif($var == 4) {print "four\n"; }
else {print "didn't get it\n"; } #default
$var = 3;
$got = 0;
# switch $var
if ($var == 1) {print "one\n"; ++$got;}
if ($var == 2) {print "two\n"; ++$got;}
if ($var == 3) {print "three\n"; ++$got;}
if ($var == 3
|| $var == 4) {print "three or four\n"; ++$got} #fall-through
unless ($got) {print "didn't get it\n"; } #default
% my $value=2;
% given ($value) {
% when (1) {
<h1>It is one, dear</h1>
% }
% when (2) {
<h2>Level two</h2>
% }
% }
%
<%once>
use v5.10.1;
</%once>