metal
написал 25 января 2008 года в 15:20 (1105 просмотров)
Ведет себя
как мужчина; открыл 31 тему в форуме, оставил 1547 комментариев на сайте.
#!/usr/bin/perl
my $max_users_count = 1000000;
my $users_count = 500000;
my $perception = 1000;
my $min_ok =0;
my $max_fail = $max_users_count;
open(CONFIG, "
my @temp = ;
close( CONFIG );
while($max_fail - $min_ok > $perception)
{
my $config_name = "test.xml.$users_count";
open( NEWCONFIG, "> $config_name" ) || die "can\'t open $config_name";
foreach $line (@temp)
{
$line =~ s/count="\d+"/count="$users_count"/;
print NEWCONFIG $line;
}
close( NEWCONFIG );
$result = system("TestChannelFrontend $config_name >out.text.$users_count 2>&1");
if( $result ==0)
{
print "test is successed for $user_count\n";
$min_ok = $users_count;
}
else
{
print "test is failed for $user_count\n";
$max_fail = $users_count;
}
$users_count = int(($max_fail - $min_ok)/2);
}
print "max users is", $min_ok;
Perl я толком не знаю, поэтому мне интересны замечания по его оптимизации. Может кто-нибудь указать явно не эффективные(или не правильные) конструкции?
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Я бы где-то так переписал.
—-8<—-8<—-8<—-
#!/usr/bin/perl
use warnings;
use strict;
my $max_users_count = 1000000;
my $users_count = 500000;
my $perception = 1000;
my $min_ok =0;
my $max_fail = $max_users_count;
open(CONFIG, «< test.xml») or die «Can\’t open test.xml»;
my $conf = join(«», );
close(CONFIG);
while ($max_fail — $min_ok > $perception) {
my $config_name = «test.xml.$users_count»;
open(NEWCONFIG, «> $config_name» ) or die «Can\’t open $config_name»;
$conf ~= s/count=«\d+»/count=«$users_count»/gm;
print NEWCONFIG $conf;
close(NEWCONFIG);
$result = system(«TestChannelFrontend $config_name >out.text.$users_count 2>&1»);
if ($result == 0) {
print «Test is passed for $user_count users\n»;
$min_ok = $users_count;
}
else {
print «Test is failed for $user_count users\n»;
$max_fail = $users_count;
}
$users_count = int(($max_fail — $min_ok) / 2);
}
print «Max user count is», $min_ok;
Да вот именно этот цикл по строкам мне не нравился, но не нашел лучшего способа, буду изучать как работает join.
Не забывай, что читает строки и не chomp’ает их, т.е. «\n» в конце строк остаётся. Поэтому для join используется пустая «прокладка».
ага, спасибо. Наконец дошли руки до этого скрипта снова:)