[verna@ontpc3 verna]$ echo "test" | sed 's/t/tr/' trest переводим на perl: [verna@ontpc3 verna]$ s2p 's/t/tr/' > test.pl смотрим файл и видим: #!/usr/bin/perl -w eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; $0 =~ s/^.*?(\w+)[\.\w+]*$/$1/; use strict; use Symbol; use vars qw{ $isEOF $Hold %wFiles @Q $CondReg $doAutoPrint $doOpenWrite $doPrint }; $doAutoPrint = 1; $doOpenWrite = 1; # prototypes sub openARGV(); sub getsARGV(;\$); sub eofARGV(); sub printQ(); # Run: the sed loop reading input and applying the script # sub Run(){ my( $h, $icnt, $s, $n ); # hack (not unbreakable :-/) to avoid // matching an empty string my $z = "\000"; $z =~ /$z/; # Initialize. openARGV(); $Hold = ''; $CondReg = 0; $doPrint = $doAutoPrint; CYCLE: while( getsARGV() ){ chomp(); $CondReg = 0; # cleared on t BOS:; # s/t/tr/ { $s = s /t/tr/s; $CondReg ||= $s; } EOS: if( $doPrint ){ print $_, "\n"; } else { $doPrint = $doAutoPrint; } printQ() if @Q; } exit( 0 ); } Run(); # openARGV: open 1st input file # sub openARGV(){ unshift( @ARGV, '-' ) unless @ARGV; my $file = shift( @ARGV ); open( ARG, "<$file" ) || die( "$0: can't open $file for reading ($!)\n" ); $isEOF = 0; } # getsARGV: Read another input line into argument (default: $_). # Move on to next input file, and reset EOF flag $isEOF. sub getsARGV(;\$){ my $argref = @_ ? shift() : \$_; while( $isEOF || ! defined( $$argref = <ARG> ) ){ close( ARG ); return 0 unless @ARGV; my $file = shift( @ARGV ); open( ARG, "<$file" ) || die( "$0: can't open $file for reading ($!)\n" ); $isEOF = 0; } 1; } # eofARGV: end-of-file test # sub eofARGV(){ return @ARGV == 0 && ( $isEOF = eof( ARG ) ); } # makeHandle: Generates another file handle for some file (given by its path) # to be written due to a w command or an s command's w flag. sub makeHandle($){ my( $path ) = @_; my $handle; if( ! exists( $wFiles{$path} ) || $wFiles{$path} eq '' ){ $handle = $wFiles{$path} = gensym(); if( $doOpenWrite ){ if( ! open( $handle, ">$path" ) ){ die( "$0: can't open $path for writing: ($!)\n" ); } } } else { $handle = $wFiles{$path}; } return $handle; } # printQ: Print queued output which is either a string or a reference # to a pathname. sub printQ(){ for my $q ( @Q ){ if( ref( $q ) ){ # flush open w files so that reading this file gets it all if( exists( $wFiles{$$q} ) && $wFiles{$$q} ne '' ){ open( $wFiles{$$q}, ">>$$q" ); } # copy file to stdout: slow, but safe if( open( RF, "<$$q" ) ){ while( defined( my $line = <RF> ) ){ print $line; } close( RF ); } } else { print $q; } } undef( @Q ); } сложновато для меня =(
Ответ на:
комментарий
от urchin
Ответ на:
комментарий
от Zulu
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Perl + FastCGI + nginx (2009)
- Форум Ламерский вопрос про Perl...... (2001)
- Форум PERL и use strict (2005)
- Форум [Perl] closedir() attempted on invalid dirhandle DIR (2009)
- Форум Perl - помогите найти ошибку (2013)
- Форум problem with perl & sub (2006)
- Форум Макрос do-stream (2014)
- Форум Perl & win32 (2005)
- Форум Откуда берутся эти строки (2019)
- Форум Добавление элементов в hash reference в рекурсивной функции (2015)