Html perl子例程输出追加;1“;

Html perl子例程输出追加;1“;,html,perl,templates,Html,Perl,Templates,我在玩子程序。这一切都正常工作,但现在当我调用sub-admin_视图时,我在页面底部得到了一个随机返回值:1 Home.pl #!/usr/bin/env -w perl no warnings 'experimental::smartmatch'; use Cwd qw(abs_path); use feature qw(switch); use CGI::Simple; use HTML::Template; my $cgi = CGI::Simple->new; my $act

我在玩子程序。这一切都正常工作,但现在当我调用sub-admin_视图时,我在页面底部得到了一个随机返回值:1

Home.pl

#!/usr/bin/env -w perl
no warnings 'experimental::smartmatch';

use Cwd qw(abs_path);
use feature qw(switch);
use CGI::Simple;
use HTML::Template;

my $cgi = CGI::Simple->new;
my $action = $cgi->url_param('cmd') || ''; #Set to: URL/?cmd=
my $mode = $ARGV[0]; #accept entry from terminal
print $cgi->header; #make html appear

if($action eq "") {
    #if URL/?cmd=
    $mode = "home";
}

if($action eq "admin_view") {
    #if URL/?cmd=admin_view
    $mode = admin_view;
}

given($mode){

when(admin_view) {
#html: Admin Mode & Display posts
    use rawr::template qw(admin_view);
    print &admin_view;
}

when(home) {
    print "Some home page";
}

##Default message
  default { print "mode not implemented" }
}
下午六时

package rawr::template;
#template stuff

use strict;
use warnings;
use Exporter qw(import);
use HTML::Template;

our @EXPORT_OK = qw(admin_view);

sub admin_view {
# open the html template
##Yuck hardcoded but ok, works for now. some reason ../tmpl/admin_view.tmpl doesn't work
my $template = HTML::Template->new(filename => '/srv/mydomain/www/rawr/tmpl/admin_view.tmpl');
# fill some parameters
   $template->param(ALIAS => "Some User");
   $template->param(CONTENT => "Hardcoded Content");
   $template->param(DATE => "Date - change me");
   $template->param(TITLE => "Hardcoded - change me");

# send Content-Type and print the template output
   print "Content-Type: text/html\n\n", $template->output;
}
1;
admin_view.tmpl

    <table border="1" id="container">
            <tr>
                    <td id="main_content">
                    <ul>
                    <li onclick="showmenu(this)">!<b>PROFILE</b>
                    <ul>
                            <li><a href="#">Modify</a></li>
                            <li> Delete</li>
                            <li> Lock</li>
                            <br>
                    </ul>
                    </li>
                    <br>
                            <TMPL_VAR NAME=ALIAS>
                    <br>
                    <br>
                            <TMPL_VAR NAME=DSP>
                    <br>
                </td>


<td id="main_content" class="opacity_box" >
<b><TMPL_VAR NAME=TITLE></b> <TMPL_VAR NAME=DATE>
            <br>
            <br>
                             <TMPL_VAR NAME=CONTENT>
            <br>
</td>
</tr>
</table>

  • !轮廓
    • 删除








模板输出很好,但在页面底部,在最后一个
标记之后,我得到了1的随机输出

</table>1
1

这个问题有什么解决办法吗?干杯

您的“管理员视图”子系统进行打印

因此,您不需要这样称呼它:

print &admin_view;
因为这样做是在打印sub的返回代码。这是最后一个没有显式返回的命令的结果,因此显示
print
成功

试试看

admin_view;

(丢掉
&
这是一种糟糕的风格)

嘿,这么简单,谢谢。做了这个把戏,也讲得通。我能问一下为什么&这是一个很糟糕的例子,因为我在很多(我猜是旧的)教程中都看到了它?是的。因为它不需要,它所做的只是a)禁用原型,b)将
@
传递到sub中。这两项可能都不是您想要做的。@Sobrique,
&foo
不仅仅是糟糕的风格;它实际上做了一些非常特别的事情,在这里没有必要!提示:始终使用
严格使用!提示:使用
无警告“实验::智能匹配”是不明智的。实际上,您应该注意警告并避免smartmatching。Smartmatching将在即将发布的Perl版本中以向后不兼容的方式进行更改。谢谢,将进行修改。有什么建议可以达到保存结果吗?我试着使用Switch&Switch::Plain,但它的语法一直让人失望。switch的cpan声明“switch-A switch语句用于Perl,不要使用if-you-can-use-given/when”,这就是为什么我使用when
given($mode){when(“admin_view”)
=>
if($mode-eq“admin_view”)
谢谢,但是如果我添加了“use-strict”;我现在收到:在“strict subs”时不允许使用空字“admin_view”使用编辑--这是因为我有一个名为admin_view的子例程吗?