Size: a a a

2021 January 28

AG

Anatolia Gr in Modern::Perl
ещё можно tr/\n/\n/. И ++$count while $file =~ m/\n/g;
источник

SZ

Sergey Zhmylove in Modern::Perl
Anatolia Gr
надо проверить хз может какая оптимизация под это есть
Нету
источник

SZ

Sergey Zhmylove in Modern::Perl
Anatolia Gr
ещё можно tr/\n/\n/. И ++$count while $file =~ m/\n/g;
While это медленно
источник

SZ

Sergey Zhmylove in Modern::Perl
Anatolia Gr
ещё можно tr/\n/\n/. И ++$count while $file =~ m/\n/g;
Самое эффектное -- это tr с одним аргументом
источник

AP

Anton Petrusevich in Modern::Perl
я таки думаю, самое эффективное, это инлайн-си функция
источник

AP

Anton Petrusevich in Modern::Perl
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis F
зачем? Это же больно по производительности и бессмысленно с точки зрения логики
Но как я уже говорил, от задачи зависит и матча одного символа может не хватить
источник

SZ

Sergey Zhmylove in Modern::Perl
И тогда my $lines = () = $file =~ m/$/gsm;
источник

DF

Denis F in Modern::Perl
Sergey Zhmylove
Но как я уже говорил, от задачи зависит и матча одного символа может не хватить
инвалиды с маками не волнуют :)
источник

DF

Denis F in Modern::Perl
или там сейчас тоже '\n'?
источник

SZ

Sergey Zhmylove in Modern::Perl
Denis F
или там сейчас тоже '\n'?
Не, там инвалиды
источник

AG

Anatolia Gr in Modern::Perl
Sergey Zhmylove
While это медленно
У меня на втором месте после tr однако
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
а для pack/unpack 24-х битных int у нас ведь нет красивого решения?
источник

R

Roman in Modern::Perl
а) запаковать как 32 и сделать substr
б) 8 + 16
источник

SZ

Sergey Zhmylove in Modern::Perl
Anatolia Gr
У меня на втором месте после tr однако
Второе место это не так важно при такой разнице
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
ну в общем криво. для моего частного случая (24 и потом 8) лучше 32 и разделять битовой арифметикой
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot my $str = "abc\n" x 1048576;
my $lines;
use Benchmark "cmpthese";
cmpthese -1, {
 tr => sub {$lines = ($str =~ tr/\n//)},
 while_dollar => sub {$lines = 0; $lines++ while $str =~ m/$/gsm},
 while_n => sub {$lines = 0; $lines++ while $str =~ m/\n/gs},
};
источник

P

PerlBanjoBot in Modern::Perl
Sergey Zhmylove
@PerlBanjoBot my $str = "abc\n" x 1048576;
my $lines;
use Benchmark "cmpthese";
cmpthese -1, {
 tr => sub {$lines = ($str =~ tr/\n//)},
 while_dollar => sub {$lines = 0; $lines++ while $str =~ m/$/gsm},
 while_n => sub {$lines = 0; $lines++ while $str =~ m/\n/gs},
};
Rate while_dollar      while_n           tr
while_dollar 4.39/s           --         -61%         -99%
while_n      11.3/s         158%           --         -98%
tr            457/s       10311%        3939%           --
https://PerlBanjo.com/19476455e6
источник

AG

Anatolia Gr in Modern::Perl
@PerlBanjoBot use Benchmark qw/cmpthese/;

my $x = "0" x 70 . "\n";
my $file = $x x 1000;
cmpthese(-1, {
       tr1 => sub { my $lines = $x =~ tr/\n/\n/ },
       tr2 => sub { my $lines = $x =~ tr/\n// },
       sub => sub { my $lines = $x =~ s/\n/\n/g },
       re1 => sub { my $lines = () = $x =~ m/\n/g },
       while => sub { my $lines = 0; ++$lines while $x =~ m/\n/g },
});
источник

P

PerlBanjoBot in Modern::Perl
Anatolia Gr
@PerlBanjoBot use Benchmark qw/cmpthese/;

my $x = "0" x 70 . "\n";
my $file = $x x 1000;
cmpthese(-1, {
       tr1 => sub { my $lines = $x =~ tr/\n/\n/ },
       tr2 => sub { my $lines = $x =~ tr/\n// },
       sub => sub { my $lines = $x =~ s/\n/\n/g },
       re1 => sub { my $lines = () = $x =~ m/\n/g },
       while => sub { my $lines = 0; ++$lines while $x =~ m/\n/g },
});
источник