Perl:我如何将undef返回到列表中?

rha*_*vin 0 perl

我在Perl中遇到了一些问题.基本上,我做这样的事情:

sub myFunction
{
    return (&myOtherFnA(),&myOtherFnB(),&myOtherFnC());
}
sub myOtherFnA() {return 'A';}
sub myOtherFnB() {return undef;}
sub myOtherFnC() {return 'C';}
Run Code Online (Sandbox Code Playgroud)

我的问题是:当myOtherFnB()返回undef时,我想要一个将undef作为第二个元素的列表.但是当myOtherFnB()这样做时,我只得到一个包含2个元素的列表,myOtherFnA()和myOtherFnC()的元素.我明白了:

( 'A', 'C')

但我想得到:

('A',undef,'C')

我需要使用什么语法来阻止Perl从列表中删除myOtherFnB()的返回,如果它是undef并且实际上只是将一个undef元素放入列表中?

Bor*_*din 7

我不知道是什么让你认为你没有进入undef名单.但是,您的代码存在许多问题

  • &定义子例程时不要使用&符号- 这是语法错误

  • 调用子程序时不要使用&符号.自二十多年前的Perl 4以来,这一点没有必要

  • 不要使用原型(定义中子程序名后面的括号),因为它们没有按照你的想法行事,它们的意思是非常专业的

  • 不要在本地标识符中使用大写字母:它们保留用于包名称等全局标识符

重写代码可以修复语法错误并纠正上述问题.如您所见,返回列表的第二个元素是undef

use strict;
use warnings;

sub my_function {
  return (
    my_other_function_a(),
    my_other_function_b(),
    my_other_function_c()
  );
}

sub my_other_function_a {
  return 'A';
}

sub my_other_function_b {
  return undef;
}

sub my_other_function_c {
  return 'C';
}


use Data::Dump;
dd [ my_function ];
Run Code Online (Sandbox Code Playgroud)

产量

["A", undef, "C"]
Run Code Online (Sandbox Code Playgroud)

  • 您的最后一个要点("不要在本地标识符中使用大写字母")并不像其他要点那样被广泛接受.这是一个本地编码风格问题; 很多人使用camelCase函数名.我自己做了. (4认同)