如果elsif返回perl - 编译错误

时间:2014-06-24 04:40:36

标签: perl if-statement return

我有以下子程序产生此错误,但我不明白为什么:

主要:: formatdate在C处没有足够的参数:... pl第44行,靠近“”May“)” 执行C:...由于编译错误而中止。

代码:

sub formatdate($month) {

  if    ($month eq "Jan") {return ".01.";}
  elsif ($month eq "Feb") {return ".02.";}
  elsif ($month eq "Mar") {return ".03.";}
  elsif ($month eq "Apr") {return ".04.";}
  elsif ($month eq "May") {return ".05.";}
  elsif ($month eq "Jun") {return ".06.";}
  elsif ($month eq "Jul") {return ".07.";}
  elsif ($month eq "Aug") {return ".08.";}
  elsif ($month eq "Sep") {return ".09.";}
  elsif ($month eq "Oct") {return ".10.";}
  elsif ($month eq "Nov") {return ".11.";}
  elsif ($month eq "Dec") {return ".12.";}
  else                    {return "N/A";}
}

print formatdate("May");

3 个答案:

答案 0 :(得分:2)

您应该阅读perlsub

您可以通过更改以下内容来解决此问题:

sub formatdate($month) {

以下内容:

sub formatdate {
    my $month = shift;

答案 1 :(得分:0)

定义formatdate的另一种方法是

sub formatdate {
  my($month) = @_;

此外,您可能希望更新print语句以包含换行符

print formatdate("May") . "\n";

答案 2 :(得分:0)

阅读perlsub是修复子程序所需的建议。

但是,我想进一步建议您在拥有像您一样使用的键/值对时识别哈希的使用。在下面的代码中,我手动指定了哈希,但是也可以使用月份名称列表非常容易地构建哈希:

use strict;
use warnings;

sub formatdate {
    my $month = shift;

    my %monthcode = qw(
        Jan    .01.
        Feb    .02.
        Mar    .03.
        Apr    .04.
        May    .05.
        Jun    .06.
        Jul    .07.
        Aug    .08.
        Sep    .09.
        Oct    .10.
        Nov    .11.
        Dec    .12.
    );

    return $monthcode{$month} || 'N/A';
}

print formatdate("May");

输出:

.05.