如何解决如何使用Perl的格式功能?
我正在按照https://www.tutorialspoint.com/perl/perl_formats.htm上的教程来学习Perl格式,但是当我将其示例输入到我的IDE中时:
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
@n = ("Ali","Raza","Jaffer");
@a = (20,30,40);
@s = (2000.00,2500.00,4000.000);
$i = 0;
foreach (@n) {
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
我得到了错误:
Scalar found where operator expected at .\qb.pl line 7,near "$name $age"
(Missing operator before $age?)
syntax error at .\qb.pl line 7,near "$name $age"
Execution of .\qb.pl aborted due to compilation errors.
我正在使用为MSWin32-x64-multi-thread构建的Perl 5,版本30,Subversion 2(v5.30.2)
解决方法
当我在5.24上运行您的代码时,会看到以下警告消息:
不赞成使用无逗号变量列表...
它也指向$name $age
行。
启用diagnostics时,我得到以下解释:
(D deprecated) The values you give to a format should be
separated by commas,not just aligned on a line.
当我如下添加逗号时:
$name,$age
警告消失,我得到以下输出:
===================================
Ali 20
2000.00
===================================
===================================
Raza 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
根据perl5280delta,此警告在5.28中成为错误。
,您的第一个错误是认为格式是可以解决您问题的有用工具。自从我一直使用Perl以来,几乎就一直忽略格式。您可能会发现使用Perl6::Form是更好的方法。
您的第二个错误是认为Tutorials Point是获取有关任何信息的好地方。那里的教程是由似乎对主题一无所知的人编写的,并且(如您在此处看到的)示例中充斥着错别字,使它们几乎毫无用处。
如果您确定要使用Perl格式,则perlform手册页将是最好的起点。
,也许以下代码示例更易于阅读,输出也更容易一目了然
use strict;
use warnings;
my($name,$age,$salary);
while( <DATA> ) {
($name,$salary) = split;
write;
}
format STDOUT_TOP =
Employee Age Salary
----------------------------------------
.
format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<< @<< @#####.##
$name,$salary
.
__DATA__
Ali 20 2000.00
Raza 30 2500.00
Jaffer 40 4000.00
输出
Employee Age Salary
----------------------------------------
Ali 20 2000.00
Raza 30 2500.00
Jaffer 40 4000.00
有很多方法可以提供输入数据。其中之一是保留相关数据的哈希。
use strict;
use warnings;
my %employees = (
Ali => { age => 20,salary => 2000.00},Raza => { age => 30,salary => 2500.00},Jaffer => { age => 40,salary => 4000.00}
);
my($name,$salary);
for $name ( sort keys %employees ) {
($age,$salary) = @{$employees{$name}}{qw/age salary/};
write;
}
format STDOUT_TOP =
Employee Age Salary
----------------------------------------
.
format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<< @<< @#####.##
$name,$salary
.
输出
Employee Age Salary
----------------------------------------
Ali 20 2000.00
Jaffer 40 4000.00
Raza 30 2500.00
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。