【问题标题】:Use of uninitialized variable warning使用未初始化变量警告
【发布时间】:2017-11-24 09:12:32
【问题描述】:

我正在使用 GetOptions 从 perl 中获取值

GetOptions(
       'lines=s'=>\$globallines,
        );

这里,lines 是一个可选参数。当用户未输入值时,我会收到 use of uninitialized variable 警告,我在 if 语句中使用 lines 变量。我无法修复此警告。你能帮帮他吗?

对不起,如果这是一个愚蠢的问题,我是 perl 的新手。

if($globallines>0){#<SOME CODEEE>

【问题讨论】:

    标签: perl unix warnings strict


    【解决方案1】:

    发生的情况是 - 如果没有提供参数,则该值未定义。 (不为零)。

    所以在数值上比较会出错。

    有几种可能的解决方案,但最简单的是:

    if ( $globallines and $globallines > 0 ) { 
    

    或者如果未定义,也许只是初始化它:

    $globallines //= 0; #sets it to zero if undef. 
    

    【讨论】:

    • 我可以使用 作为字符串值吗??
    • 呃。是的。我想。但代码引号不是&lt;,而是反引号。但是 perl 不在乎。您可以使用$globallines //= "a name here"; 进行分配,就像数值一样。但是如果你这样做,你的&gt;0 测试仍然会出错。 (除非字符串是"0.0" 或其他数字可转换为零)
    【解决方案2】:

    如果-lines选项是...... er ...可选(!),您希望在省略选项时的行为是什么?选择一个默认值并在调用GetOptions()之前分配它。

    my $globallines = 0; # Or whatever value is appropriate
    
    GetOptions(
       'lines=s' => \$globallines,
    );
    

    另外,您不想要lines=i 而不是lines=s?这将确保你只得到一个整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多