Вот прямой перевод
#!/usr/bin/env perl
use strict;
use warnings;
print <<HERE;
##################
LAUNCHING REQUESTS
COUNT: $ARGV[1]
DELAY: $ARGV[2]
SESSID: $ARGV[0]
##################
HERE
my $i = 0;
while($ARGV[1] > $i){
$i += 1;
system("php avtest.php $ARGV[0] $ARGV[3] &");
print "EXECUTING REQUEST $i\n";
sleep $ARGV[2];
}
Но было бы более целесообразно читать параметры командной строки в переменные, названные в соответствии с их предназначением, и не полагаться на запоминание порядка аргументов.
Краткие исправления в преобразовании:
Я использую строку здесь для представления многострочного текста.Я мог бы также добавить несколько операторов print
, чтобы более точно имитировать версию bash
В аргументах bash доступ осуществляется как пронумерованные переменные, начиная с $ 1 и повышаясь.В Perl список аргументов представлен массивом @ARGV, который нумеруется, начиная с нуля (как массивы в большинстве языков).И в bash, и в Perl имя сценария можно найти в переменной $ 0.
В Perl массивы записываются как @arrayname
при обращении ко всему массиву, но они используют $ arrayname [index] при доступе к членам массива.Таким образом, Perl $list[0]
похож на bash ${list[0]}
, а Perl @list
похож на bash ${list[@]}
.
В Perl переменные объявляются с ключевым словом my
;эквивалент в bash будет declare
.
Я использовал функцию system
для порождения фоновых процессов.Его аргументом может быть просто командная строка, как вы могли бы использовать ее в bash.
В отличие от echo
, print
необходимо указать, если в конце строки должен быть символ новой строки.Для последних версий Perl существует функция say
, которая добавит для вас новую строку.
Функция Perl sleep
довольно понятна.
РЕДАКТИРОВАТЬ: из-за опечатки $i
в выражении print было представлено как $ni
, что приводило к ошибкам во время выполнения.Это было исправлено.