【问题标题】:Failed to pass variable from one sub routine to another sub routine using perl cgi?使用 perl cgi 无法将变量从一个子例程传递到另一个子例程?
【发布时间】:2017-05-22 07:39:34
【问题描述】:

在这里,我尝试使用 perl cgi 将变量从一个子例程传递到另一个子例程。但是我的变量没有从一个子例程传递到另一个,

use strict;
use warnings;
use CGI ':standard';
print header;
print start_html("example");
print end_html;
my $file = "text.txt";
open my $fh,'<', $file or die $!;
sub1($fh);
sub2($fh);

sub sub1 {
   my $fh = shift;
   while ( my $line = <$fh> ) {
      print $line;
   }
   return $fh;
}

sub sub2 {
   my $line = shift;
   print start_form;
   print "<table>";
   print "<th>content</th>";
   print "<tr>";
   print "<td>$line<td>";
   print "</tr>";
   print "</table>";
   print end_form;
}

在上述子例程中(即 sub2 $line 内容不是从 sub1 传递的)

【问题讨论】:

  • 您传递文件句柄 ($fh) 而不是“普通”变量 ($line)
  • 您提供给我们的代码无法编译。向我们展示您的实际代码。但 Jens 可能是对的 - 你打电话给sub2($fh),然后尝试使用$fh,就好像它是一条线一样。
  • 我自己已经调用了 sub2($fh) @Sobrique
  • 您想将哪个变量从一个子程序传递到另一个子程序?您的代码根本不这样做。您将相同的变量 ($fh) 传递给两个不同的子例程。但是您的 sub2() 看起来您打算从文件中传递一行而不是文件句柄。

标签: perl cgi


【解决方案1】:

也许你想要

my $content = sub1($fh);
sub2($content);

sub sub1 {
    my $fh = shift;
    my $content;
    while ( my $line = <$fh> ) {
        print $line;
        $content .= $line;
    }
    return $content;
}

在 sub1 调用后文件句柄 $fh 也可以关闭

【讨论】:

  • 在第二个子程序中,我是否需要像我的 $fh=shift.@Nahuel Fouilleul 一样使用 shift
  • 要读取参数,您可以使用 shift(@_)my ($x,$y,@etc)=@_; idioms ;所以在这种情况下:my ($content)=@_;,或者$content=$_[0];;在 perl 中,总是有“不止一种方法可以做到”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 2015-08-02
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多