如何实现文件?

时间:2018-04-07 00:25:42

标签: perl file

假设我在文件中有一些记录:

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年?

1 个答案:

答案 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 strictuse warnings的习惯 - 然后了解并解决他们揭示的所有问题。