与Python 2.7相比,Perl 5有何不同?
我一直在尝试使用Perl 5,看起来很难,因为我早先尝试打开/读取/关闭文件时遇到了问题。
我有正则表达式Python代码:
#!/usr/bin/python
import re
SyslogText = open('syslog.txt', 'r')
OutputText = open('results.txt', 'w')
KeywordText = open('keyword.txt', 'r')
listOfKeywords = []
for keyword in KeywordText:
listOfKeywords.append(keyword)
for string in SyslogText:
for keyword in listOfKeywords:
if keyword in string:
hostName = re.search(r'\s[A-Z]+\s', string, re.I)
dateAndTime = re.search(r'[A-Z][A-Z][A-Z]\s[0-9]+\s[0-9]{2}\:[0-9]{2}\:[0-9]{2}', string, re.I)
moreResults = re.search(r'\:\s[^^]+\S', string, re.I|re.M)
portInfo = re.search(r'[A-z]+[[]\d+[]]', string)
if portInfo:
print '**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + portInfo.group(0) + '\n'
OutputText.write('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + portInfo.group(0) + '\n')
else:
print ('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + keyword + '\n')
OutputText.write('**' + keyword + '**' + ' ' + hostName.group(0) + dateAndTime.group(0) + moreResults.group(0) + ' ' + keyword + '\n')
使用此示例,在转换为Perl时,如何在Perl中编写它,尤其是for
循环?
我从网站http://perldoc.perl.org/学到了Perl,但我并没有真正理解如何编写for
循环。
我已经开始将其转换为Perl(部分内容)
#!usr/bin/perl
use strict;
use warnings;
my $syslogFile = 'syslog';
open (my $info, '<', $syslogFile) or die "Could not open $syslogFile";
while (my $line = <$info>)
{
chomp $line;
print "$line\n";
}
我被卡在for
循环部分,因为我不太确定如何在Perl中编写它。此外,在打开和阅读文本文件时,是否需要调用close
?如果是这样,你何时使用它?我确实在perldoc中读过它,但我不明白。
答案 0 :(得分:2)
Perl等同于表单的Python循环:
for X in Y:
其中Y
是一个数组,将是:
for my $X (@Y) {
…
}
如果Y
是文件,则问题中的while
循环是正确的。
就你的另一个问题而言:在Perl中并不严格要求关闭文件,就像它不在Python中一样。 (该文件将保持打开状态,直到文件句柄超出范围 - 在这种情况下,当进程退出时会发生这种情况。)