Функционально
этот код будет делать что-то похожее на это:
open my $fh, '<' , '/tmp/cat-cache' or Carp::croak("Cant open file $@ $! ");
sub lessquote {
my $x = shift;
my $meta = shift; # meta means were repeating thise code for >128
# Special Case for whitespace
if(( not defined $meta ) && ( $x == 9 or $x == 10 ) ){
return chr($x);
}
# Null and M-^@
if( $x == 0 ){
return "^@";
}
# ^A to ^Z as well as M-^A to M-^Z
if( ( 0 <= $x ) && ( $x <= 31 )){
return "^" . chr( $x + ord('A') - 1 );
}
# Also M-^?
if( $x == 127 ){
return "^?";
}
# Does the M- Family
if( $x >= 128 && $x <= 255 ){
return "M-" . lessquote( $x - 128 , 1);
}
return chr( $x );
}
while( my $line = <$fh> ){
$line =~ s{(.)}{ lessquote( ord( $1 ) ) }eg;
}
Не идентично, но похоже.
NB. Похоже, что lessquote соответствует моему выводу 'cat -v'.
Но, как вы можете видеть, делать то же самое немного меньше, чем тривиально и напрямую не подходит для регулярного выражения, но, тем не менее, я не понимаю, почему они превратились в 'cat'.
Насколько их стиль идет
Они плохо работают, стиль кода таков, что в 1990-х годах, и его следует избегать.
open my $fh , '-|' , 'cat' , '-v' , '/tmp/cat-cache' or Carp::croak("Cant open file $@ $! ");
Синтаксис:
open my $FILEHANDLE , $OPENMODE, $FILENAME || Carp::croak($ERRORMESSAGE)
open my $FILEHANDLE , $OPENMODE, $SHELLCOMMAND || Carp::croak($ERRORMESSAGE)
open my $FILEHANDLE , $OPENMODE, $SHELLPROGRAM, @ARGS || Carp::croak($ERRORMESSAGE)
Является ли «предпочтительным» обозначением в наши дни по множеству причин.
Конечно, вы не захотите АКТУАЛЬНО использовать кошку, но я оставил это здесь для наглядного примера.