Насколько отличается Perl 5 по сравнению с Python 2.7?От 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
?
Я изучил Perl с веб-сайта http://perldoc.perl.org/, но я не совсем понял все слишком четко, как должен быть записан цикл 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, но я этого не понимаю.
Perl использует цикл цикла C, который имеет инициализатор, условие и шаг// incrementer, который сильно отличается от Python. (Python не имеет инициализатора, условия и приращения). Он просто повторяется до тех пор, пока 'StopIteration' не будет поднят в последовательности. –
@AlexanderHuszagh Вы не видите этот стиль очень часто в коде Perl. Более популярной конструкцией будет цикл [foreach-style] (http://perldoc.perl.org/perlsyn.html#Foreach-Loops). –
Будучи как Perl while(), цикл заменил второй цикл Python for(). Я оставляю это. Оставшиеся (выше и ниже) контуры Python for() лучше всего делать в Perl, используя [читать весь файл в массив] (http://stackoverflow.com/questions/5948360/perl-read-a-file-into-an -array) и [функция отображения Perl] (http://perldoc.perl.org/functions/map.html) –