Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to mimic -l inside script

Tags:

perl

Is there a simple way to mimic the effect of the -l command-line switch within perl scripts? (Of course, I can always chomp each line and then append "\n" to each line I print, but the point is to avoid having to do this.)

like image 200
kjo Avatar asked Dec 22 '25 10:12

kjo


2 Answers

No. You can get the automatic appending of "\n" by using $\, but you have to add the chomp yourself.

Here's how -l works.

$ perl -MO=Deparse -ne 'print $_'
LINE: while (defined($_ = <ARGV>)) {
    print $_;
}

$ perl -MO=Deparse -lne 'print $_'
BEGIN { $/ = "\n"; $\ = "\n"; }      # -l added this line
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;                        # -l added this line
    print $_;
}

(The comments are mine.) Notice that -l added a literal chomp $_ at the beginning of the loop generated by -n (and it only does that if you use -n or -p). There's no variable you can set to mimic that behaviour.

It's a little-known fact that -l, -n, and -p work by wrapping boilerplate text around the code you supply before it's compiled.

like image 183
cjm Avatar answered Dec 24 '25 09:12

cjm


Yes, try using this at the beginning of your script after the shebang and strictures:

$/ = $\ = "\n"; # setting the output/input record separator like OFS in awk

and use in the loop :

chomp;
print;

Or like this :

use strict; use warnings;
use English qw/-no_match_vars/;

$OUTPUT_RECORD_SEPARATOR = "\n";

while (<>) {
    chomp;
    print;
}

I do not recommend to use

#!/usr/bin/perl -l

for a better clarity =)

See perldoc perlvar

like image 34
Gilles Quenot Avatar answered Dec 24 '25 11:12

Gilles Quenot



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!