gpt4 book ai didi

Perl 变量范围和在 if/else block 中使用相同的变量

转载 作者:行者123 更新时间:2023-12-04 18:09:41 24 4
gpt4 key购买 nike

我想弄清楚如何在 if/else 块中使用相同的变量。例如,

$var1
$var2
$var3

if(condition) {
...
}
else {
...
}

我需要访问块中的 $vars1、2 和 3,但我不能。我想我有一个范围界定问题。我尝试将它们设为全局,但我看到很多错误并且程序无法正常运行。我错过了什么?

这是我的代码。我的问题是服务器需要底部的变量(@varList 等),因为这是一个也使用 CGI 的 apache 服务器上的脚本。它会吐出这样的错误:
[error] Global symbol "$questionslist" requires explicit package name at /home/megaoff/www/vi
ewquestions.dhtml line 46.\nGlobal symbol "$site" requires explicit package name at /home/megaoff/www/viewquestions.dhtm
l line 46.\nGlobal symbol "$xs" requires explicit package name at /home/megaoff/www/viewquestions.dhtml line 46.\nGlobal
symbol "$username" requires explicit package name at /home/megaoff/www/viewquestions.dhtml line 46.\n

#!/usr/bin/perl

use strict;
use CGI;
use BarryP;

my $pagev = BarryP::makeP("noextracook", 1);
my $bvga = $pagev->{'vga'};
my %vga = %$bvga;
my $cgi = CGI->new;
my $usePage = "answerquestions.html";
my $anslist = "/home/megaoff/www/limages/anslist.txt";
my $unanslist = "/home/megaoff/www/limages/unanslist.txt";

my $action = $vga{"action"};


if($action eq 'adminmode') {
my @a_list = $pagev->listFile($anslist);
my %list = map { split(/\t/, $_, 2) } @a_list;
}
else {
my @u_list = $pagev->listFile($unanslist);
chomp @u_list;
my %questions = map { $_ => '' } @u_list;
my $question = $cgi->param('question');
my $answer = $cgi->param('answer');
chomp($question, $answer);

open(my $ANS, '>>', $anslist) or die "Can't open file $anslist: $!";
print $ANS "$question\t$answer\n";
close($ANS) or die "Can't close file $anslist: $!";

delete $questions{$question};
open(my $UNANS, '>', $unanslist) or die "Can't open file $unanslist: $!";
print $UNANS "$_\n" foreach keys %questions;
close($UNANS) or die "Can't close file $unanslist: $!";

my $questionslist = join("<br>", @u_list);
my $site = $pagev->{'site'};
my $xs = $pagev->{'xs'};
my $username = $pagev->{'username'};
}

my @varList = ('questionslist', $questionslist, 'action', $action, 'site', $site, 'xs', $xs, '$username', $username);

$pagev->pageHeader($usePage, @varList);

最佳答案

你的问题是范围界定。在第 46 行,当您引用 $questionlist 等时,它们已经超出范围,因为您在 else 块中定义了它们。

你有(简化):

if ($blah) {
# do stuff
} else {
# do other stuff
my $variable = "something";
}

doSomethingWith($variable); # illegal, $variable is not in scope.
$variable没有在 else 块之外定义,else 块甚至可能不会被执行。您要么需要将函数放在 else 块中,要么找到某种方法为这些变量提供默认值,并在 if 语句之前声明它们。

关于Perl 变量范围和在 if/else block 中使用相同的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com