metal
написал 25 января 2008 года в 15:20 (983 просмотра)
Ведет себя
как мужчина; открыл 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 декабря в 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
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Я бы где-то так переписал.
—-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 используется пустая «прокладка».
ага, спасибо. Наконец дошли руки до этого скрипта снова:)