【问题标题】:undefined value in perl conditionperl条件中的未定义值
【发布时间】:2013-08-30 01:35:12
【问题描述】:

我是 perl 编程的初学者

我想在 fetch 中的值为 null 时执行一部分代码意味着不存在 cookie,如果有 cookie 则执行另一部分。

但我面临错误:

软件错误:

无法在 /net/rtulmx0100/fs7/www/LabelMeDev_Student/annotationTools/perl/session_test.cgi 第 93 行, 第 3 行的未定义值上调用方法“值”。

这是我的代码:

%cookies = CGI::Cookie->fetch;
$id = $cookies{'name'}->value;
if($id == null)
{ 
    print "Content-Type: text/plain\n\n" ;
    print "hahahah";
}
else{
    print "Content-Type: text/plain\n\n" ;
    print $id;
}

【问题讨论】:

  • 始终使用use strict; use warnings;!它会告诉你没有 null 这样的东西。
  • 还有== 测试数字等价性。因为null 实际上与"null" 相同,并且计算为0;你正在有效地检查这个:$id == 0.

标签: perl cookies cgi


【解决方案1】:

Perl 中没有null,尽管有undef。如果您在打开use strict 的情况下运行,您会收到关于使用null 的错误,您应该始终这样做。

由于CGI::Cookie 返回一个用于初始化散列的列表,我们可以使用exists 运算符来查看给定的键是否存在于散列中。

此外,由于条件的两个分支都会打印 CGI 标头,因此我们可以将其移到条件之外,并且可以使用标准的 CGI 模块来执行此操作。

use strict;
use warnings;

use CGI;
use CGI::Cookie;

my $q = CGI->new;
print $q->header( 'text/plain' );

my %cookies = CGI::Cookie->fetch;
if ( exists $cookies{name} ) { 
    print $cookies{name}->value;
} else { 
    print "hahahah";
}

【讨论】:

  • 我认为你应该测试defined,出于实际和教学原因。
  • @friedo 感谢您的回答。我想问你一件事,我想从全局变量 my $fullfn = $LM_HOME 中获取值。 “annotationTools/perl/session_location.txt”;其中 $LM_HOME 是全局变量,但问题是当我将 my 与 $LM_HOME 一起使用时,它会变成新变量,但我需要它与全局变量具有相同的值。因此,当使用 use strict 时,它会给出错误。我已经包含带有全局变量的文件,即需要 global.pm
  • @Zeeshan 这是一个不同的问题,应该在新页面上提出。也很难弄清楚这个新问题是什么,所以当你最后问的时候请改进它。包含为什么您需要了解它的声明,以便我们可以针对您的具体情况提供更好的答案。
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2014-09-17
  • 2011-07-01
  • 2015-12-07
相关资源
最近更新 更多