Perl从文件中获取模式

Perl从文件中获取模式,perl,Perl,我想从文件info.log中获取值,并将它们与$upper中的字符串进行比较 这就是我所尝试的 my $upper = "S14"; open(my $file, "<", "info.log") or die "Can't open info.log: $!"; my $string = $upper; while (<$file>) { if ( ! -e $string) { print " print here $string\n"; }

我想从文件
info.log
中获取值,并将它们与
$upper
中的字符串进行比较

这就是我所尝试的

my $upper = "S14";

open(my $file,  "<",  "info.log")  or die "Can't open info.log: $!";

my $string = $upper;

while (<$file>)  {
  if ( ! -e $string) {
    print " print here $string\n";
  }
}

程序输出文件的所有内容。它不应该打印ss4,但它打印了?

正确的方法是:

open (FILE, "< info.log") or die "error msg";
while (<FILE>)  
{
    if (/$upper/) {
        MATCH CASE
    }
}
open(文件“

基本上,您可以循环浏览文件并检查每一行。因为您正在读取中的文件,所以不需要变量($\)。在复选框上。

如果您只想搜索匹配项,请使用grep,它会更快。否则,使用foreach进行迭代

my $upper="S14";
open(my $file,  "<",  "info.log")  or die "Can't open info.log: $!";
my $string = $upper;
my @lines = <$file>;

my @matches grep { $_ =~ /$string/ } @lines; #searching *faster

foreach (@lines) { #iterating
   chomp; #new line stuff
   if($_ =~ /^$string$/is){
      #stuff
   }
}
my$upper=“S14”;
打开(my$file),首先,您必须始终使用
使用严格的
使用警告启动每个Perl程序

正如其他人所指出的,
-e
操作符表示是否存在该名称的文件。它不会检查一个字符串是否出现在另一个字符串中

有几种方法可以做到这一点。我会使用正则表达式,但不知道您处理的是什么类型的数据,并且为了避免混淆,我使用编写了一个解决方案,如果第二个字符串出现在第一个字符串中,它将返回零或更多

use strict;
use warnings

my $file = 'info.log';

my $upper = 'S14';

open my $fh, '<', $file  or die "Can't open '$file': $!";

my $string = $upper;

while (<$fh>)  {
  if (index($_, $string) >= 0) {
    print "This file contains '$string'\n";
    last;
  }
}
使用严格;
使用警告
my$file='info.log';
my$upper='S14';

打开我的$fh,
-e$string
测试名为
$string
的文件是否存在。你没有与info.log的内容进行比较。为什么这个问题被标记为
bash
?当
$upper
S14
时,@Barmar说了什么,为什么不打印
ss4
(如果它是比较字符串,它不是)?慢下来说文件包含变量是什么意思?文件只包含文本,除非它们是编程语言源代码,否则它们不包含变量。@barmar:OP的英语显然不流利。请给他们你期望的体面。如果你要将文件中的所有内容复制到Perl ar中ray,那么请至少先检查文件的大小:它可能不包含您认为它所包含的内容。1)OP仅显示小写字符。脚本如何匹配这些字符?此外,您如何防止OP文件中可能的
SS14
匹配?假设大小写不是问题?
use strict;
use warnings

my $file = 'info.log';

my $upper = 'S14';

open my $fh, '<', $file  or die "Can't open '$file': $!";

my $string = $upper;

while (<$fh>)  {
  if (index($_, $string) >= 0) {
    print "This file contains '$string'\n";
    last;
  }
}