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;
}
}