Small problem with Perl field replacement

Source: Internet
Author: User

今天做一份东西需要对一些文件特定的字段进行修改,其实这改一下很方便,甚至不需要去写一个脚本,但是为了方便使用,同时也是巩固一下perl的知识,便写了这个小脚本。

但在写的过程中还是碰到了几个小问题,首先是perl目录切换的问题,我在当前目录readdir、opendir一个目录,并获得文件名以后,需要将这些文件打开处理,但是打开这些文件必然需要一个绝对路径或者是相对路径,所以导致直接打开这些文件会提示文件不存在的错误,当然打开文件的时候使用了open .... or warn "can not open file : $!";这样的处理。所以这个时候我采用了拼接一个目录的方法。

 1 foreach my $myFile (readdir SCNDIR) { 2   my $localFile; 3   if ($scnDir =~ /\/$/) { 4     $localFile = $scnDir . $myFile; 5   } else { 6     $localFile = $scnDir . ‘/‘ . $myFile; 7   } 8   if (-f $localFile) { 9     editFileWord ($localFile);10   }11 }

其中$scnDir = $ARGV[0] 接收的,这里对$scnDir 做了一个判断,判断末尾是否加入了“/"符号。

这样就能解决文件路径的问题。

然后在匹配的时候发现自己犯了一个很大的错误。

就是通常使用open直接打开文件,然后就用while (<FILE>)的方式接收文件的每一句了,其中FILE是文件句柄。

然后对就收的到每一句进行匹配

$lines =~ s/$editWord/$editedWord/g

s表示搜索,g表示匹配所有,整句就标题把所有的$editWord替换成$editedWord

写完以后运行,查看文件,发现文件没有发生任何更改,想了一会发现自己真是蠢到家了。

$lines接收到了文件中读取的句子,但是我替换完以后并未将重新写回到文件中,开始想用seek的方法去写,发现如果替换的长短不一样,可能会造成一点问题。

也想过直接写入到一个新的文件,然后进行覆盖,不过终究感觉有点麻烦,然后搜了一个cpan,找到一个好模块

Tie::File

Tie::File - Access the lines of a disk file via a Perl array

用这个可以非常便捷地修改文件,方法如下:

sub editFileWord {  my $file = shift;  my $existWord = 0;  tie my @arrayLines, ‘Tie::File‘, $file or die "can not open file : $!";  for (@arrayLines) {    if (s/$editWord/$editedWord/g) {      $existWord = 1;    }  }  if ($existWord) {    print $file . "\n";  }}

这样就完成了字段的替换,很简单的一个小程序,但是却存在着不少的小问题。

Tie对文件的处理还是有神奇的作用的,有心的朋友可以去关注一下。

对perl还在摸索中,愿各位大神能留下宝贵的意见。

perl对字段替换的小问题

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.