【问题标题】:perl subroutine output appending "1"perl 子程序输出附加“1”
【发布时间】:2017-01-31 03:01:48
【问题描述】:

我在玩子程序。一切正常,但现在当我调用子 admin_view 时,我在页面底部得到一个随机返回值:1

首页.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" }
}

模板.pm

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>

模板输出正常,但在页面底部,我在最后一个 &lt;/table&gt; 标记之后得到 1 的随机输出

</table>1

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

【问题讨论】:

  • 提示:始终使用use strict;
  • 提示:使用no warnings 'experimental::smartmatch'; 并不明智。您实际上应该注意警告并避免智能匹配。在即将发布的 Perl 版本中,智能匹配以向后不兼容的方式进行更改。
  • 谢谢,会修改的。有什么建议可以达到保存结果吗?我尝试使用 Switch & Switch::Plain 但一直被它的语法打倒。 switch 的 cpan 状态“Switch - Perl 的 switch 语句,如果可以使用给定/何时,请不要使用”,这就是我使用 when 的原因
  • given ($mode) { when("admin_view") => if ($mode eq "admin_view")
  • 谢谢,但是如果我添加“use strict;”我现在收到:Bareword "admin_view" not allowed while "strict subs" using your edit -- 这是因为我有一个名为 admin_view 的子例程吗?

标签: html perl templates


【解决方案1】:

您的“admin_view”子打印。

因此您不需要像这样调用它:

print &admin_view;

因为这样做,它会打印 sub 的返回码。这是最后一个没有明确返回的命令的结果,所以告诉我们print 是成功的。

试试吧

admin_view;

(丢掉&amp;这是不好的风格)

【讨论】:

  • 呵呵,这么简单,谢谢。成功了,也很有意义。我可以问为什么 & 是一个不好的例子,因为我在许多(我猜是旧的)教程中看到它?
  • 是的。因为它不是必需的,它所做的只是 a) 禁用原型,b) 将 @_ 传递给子。这两者可能都不是你想做的。
  • @Sobrique, &amp;foo 不仅仅是糟糕的风格;它实际上做了一些非常特别的事情,这里不需要!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2011-12-22
  • 2016-02-18
  • 1970-01-01
相关资源
最近更新 更多