在perl cgi中使用()除法运算符时出错?

在perl cgi中使用()除法运算符时出错?,第1张

概述我正在使用以下函数来计算天数. setAge函数的参数是epoc时间. sub getAge { my $diff; my $age=0; my $sec=86400; my $createTime; my $currTime; $createTime = $_[0]; $currTime = UnixDate("now", "%s"); 我正在使用以下函数来计算天数. setAge函数的参数是epoc时间.

sub getAge {    my $diff;    my $age=0;    my $sec=86400;    my $createTime;    my $currTime;    $createTime = $_[0];    $currTime = UnixDate("Now","%s");    $diff = ($currTime - $createTime);    $age =(($diff-($diff%$sec))/$sec);    return $age; }

但每当我使用除法运算符时,我得到以下错误

Syntax error at /apollo/env/ShiftReport/server-root/gcShiftReport.cgi line 616,near ")    {"Syntax error at /apollo/env/ShiftReport/server-root/gcShiftReport.cgi line 618,near "case 'OX-Gift-Hyderabad'"Execution of /apollo/env/ShiftReport/server-root/gcShiftReport.cgi aborted due to compilation errors.

错误行来自紧随其后的函数定义.

sub getname {    my $tempname = $_[0];    switch ($tempname)    {            case 'Cart Software' { return 'CART' }            case 'OX-Gift-Hyderabad' { return 'Gift' }            else { return $_[0]}    }}

有人可以指出为什么会发生这种情况并且仅在我使用除法(/)运算符时.

解决方法 如评论中所述,您使用的是已弃用的 Switch模块.您可能忘记添加使用Switch,因此不会导入switch关键字.如果你想要这个功能,你应该使用使用功能qw(switch),它使用给定的关键字,when和default.

您的错误消息 – 相当模糊 – 来自perl而不处理switch($variable){…}作为有效语句.编译器认为它看到一个函数,因为裸字切换后跟parens,但是下面的块{…}会导致错误.

这与它之前的代码无关,如果我添加使用Switch,代码适用于我.

如果对此代码使用此特定功能是一个不错的选择,那么这是值得商榷的.

use feature qw(switch);sub getname {    my $tempname = $_[0];    given ($tempname)    {            when ('Cart Software') { return 'CART' }            when ('OX-Gift-Hyderabad') { return 'Gift' }            default { return $_[0]}    }}

相当于,不依赖于开关:

sub getname {    my $name = shift;    return "CART" if $name eq "Cart Software";    return "Gift" if $name eq "OX-Gift-Hyderabad";    return $name;}

我认为这是更可取的,因为更清楚哪种类型的比较.

ETA:您的子程序getAge可以更有效地编写.我冒昧地删除你的随机资本,因为它们是邪恶的,而perl确实区分了aFunctionForGettingStuff和aFunctionForgettingStuff.

我看到你正在使用某种自制方式截断浮子.这不是必需的,因为perl确实有一个内置函数来执行该 *** 作:int()

sub getage {    my $createtime = shift; # shift first argument off @_    my $sec = 86400;    # use int() instead of removing remainder    my $age = int((UnixDate("Now","%s") - $createtime) / $sec);    return $age;}

没有必要将语句堆叠成一个,但我认为删除尽可能多的转换变量是个好主意.但是,我认为有必要 – 从可读性的角度和良好的实践 – 在实际使用变量之前不要声明变量.这样,当你阅读代码并看到我的$foo = …你知道$foo被声明并分配到那里.

你甚至可以删除$age变量,但我觉得它确实增加了可读性以留下它.

总结

以上是内存溢出为你收集整理的在perl cgi中使用(/)除法运算符时出错?全部内容,希望文章能够帮你解决在perl cgi中使用(/)除法运算符时出错?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存