我正在使用以下函数来计算天数. 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变量,但我觉得它确实增加了可读性以留下它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。