Portál AbcLinuxu, 2. listopadu 2025 17:51
perl umi /od/../do/ napr. ze souboru: 1 2od 3 4 5do 6do 7do 8 vytiskne: 2od 3 4 5do lze nejak nastavit aby tisknul vcetne (napr ve VIMu to jde pomoci +-: /od/+,/do/-)
my $state = 0;
while (<>) {
next unless $state ||= m/od/;
print;
last if m/do;
}
popr sa mozes pohrat s grep (tiez netestovane):
my $state = 0;
my @list = grep { $state ||= m/od/; $state &&= ! m/do; $state } <>
my $state = 0;
while (<>) {
next unless $state ||= m/od/;
print;
last if m/do/;
}
Druhy priklad potrebuje krapet upravit aby zahrnul i "do" radek. Pro prehlednost jsem jej rozepsal na vice radek
my $state = 0;
print grep {
$state ||= m/od/;
if ($state) {
$state &&= ! m/do/;
1;
} else {
$state;
}
} <>;
Oboji testovano v perl v5.10.0 pod cygwinem.

$state
resila jsem to takhle, je to delsi, ale pro me srozumitelne.
bohuzel to nejde jako one-liner :(
$tisk=0;
open(INPUT, $in) ;
######### tisk vybranych #
while ($radek =INPUT) { #tady ma byt INPUT v spic. zavorkach
#OD kdyz je zacatek, je $tisk=1
if ($radek =~/od/) {
$tisk=1;
}
#DO kdyz je konec, vytiskni ho, a $tisk=0
if ($radek =~/do/) {
print $radek;
$tisk=0;
}
#vlastni tisk pro $tisk=1
if ($tisk==1) {
print $radek;
}
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.