假设我在文件中有一些记录:
ID Name Age Salary Phone
1 Ram 60 100 123456789000
2 tam 30 200 7436674776
3 sam 20 300 3734837837
4 kim 30 400 2
如何显示所有没有有效电话号码的人的详细信息?
这就是我所做的:
open(f, <Users);
my @col = map { (split)[4] } split /\n/, f; # Phone numbers are stored in an array
foreach my $i ( @col ) {
if ( grep -v /[[:digit:]]{10}/, @col ) {
print "grep success\n";
print "$i";
}
}
但我收到很多错误。
我还有其他问题,例如如果有经验的话,如何将薪水修改15%&gt; 20年?
答案 0 :(得分:5)
您似乎只是通过猜测语法来编写代码。除非你非常幸运(而且我们大多数人都没有那么幸运),否则这种情况不太可能奏效。
我建议您退后一步,找到a good resource that can teach you the basics Perl语法 - 因为您目前显然遇到了问题。
现有代码中的前两个错误是由代码中的简单拼写错误引起的。使用以下代码打开文件:
open(f, <Users);
但是文件名和打开模式需要在带引号的字符串中。
open(f, '<Users');
但是,它通常被认为是一种良好做法:a)使用词汇变量作为文件句柄。
open(my $f, '<Users');
b)将开放模式和文件名作为open()
的单独参数。
open(my $f, '<', 'Users');
并且c)检查open()
的返回值并采取适当的行动。
open(my $f, '<', 'Users') or die "Cannot open 'Users': $!\n";
其次,您尝试仅使用其名称来读取文件句柄。
... split /\n/, f;
但是你需要使用文件输入操作符(< ... >
)来从文件句柄中读取数据。
... split /\n/, <f>;
如果你使用我的建议并转而使用词法变量来处理文件句柄。
... split /\n/, <$f>;
我强烈建议您养成在所有Perl代码中添加use strict
和use warnings
的习惯 - 然后了解并解决他们揭示的所有问题。