| IO-Extended documentation | Contained in the IO-Extended distribution. |
IO::Extended - more print functions
use IO::Extended ':all';
printl 'foo bar';
println 'foo bar';
ln "foo bar";
printfln 'foo %s', 'bar';
$str = sprintfln 'foo %s', 'bar';
warnfln 'foo %s', 'bar';
diefln 'foo %s', 'bar';
tabs 5;
ind 1;
indn;
print indblock( "alpha\nbeta\ngamma\n" );
indb;
indstr;
nl( 'string' );
IO::Extended contains a bunch of print-like functions, which automatically add newline characters to the string.
qw(println printfln) by default.
Use the ':all' for automatically adding the complete set.
Scalars for constructing tabs. Indentation is done via printing space x ( indentation * tabsize ).
Same as normal print, but with indentation.
Same as normal print, but adds newline character to the end.
Synonymou to println.
Synonymou to printfln.
Same as normal (s)printf, but has some extensions to the FORMAT string.
Same as normal (s)printf, but adds newline character to the FORMAT string (Result).
As warn, but accepts a FORMAT string like printfln.
As die, but accepts a FORMAT string like printfln.
Sets the indentation value.
Increases the indentation one value up.
Decreases the indentation on back in its history.
Sets indentation to zero and resets its history.
Sets the tabsize for indentation. Returns the actual tabsize if parameter is omitted.
Returns the absolute indentation space.
join ' ', @_ and adds a newline to it. No indentation.
print nl( "my cool", "text" )
results in
"my cool text\n"
Barely all format is forwared to the perl internal printf like functions, but one is translated.
%S or %D in the format string will get translated to '%s' or '%d'. It should help writing
printfln "Your given string %S is broken.", $string;
[Note] $string could contains confusing whitespaces, for example.
By author. Ask comp.lang.perl.misc or comp.lang.perl.module if you have very general questions.
If all this does not help, contact me under the emailadress below.
Murat Uenalan, muenalan@cpan.org
Copyright (c) 1998-2002 Murat Uenalan. Germany. All rights reserved.
You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
perl(1). perlfunc
| IO-Extended documentation | Contained in the IO-Extended distribution. |
# Author: Murat Uenalan (muenalan@cpan.org) # # Copyright (c) 2001 Murat Uenalan. All rights reserved. # # Note: This program is free software; you can redistribute # # it and/or modify it under the same terms as Perl itself.
package IO::Extended; require 5.005_62; use strict; use warnings; use Carp; use Exporter; our @ISA = qw(Exporter); our %EXPORT_TAGS = ( 'all' => [ qw( printl println ln lne printfln lnf sprintfl sprintfln warnfln diefln ind indn indb indstr indblock tabs nl ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw(println printfln); our $VERSION = '1.0'; # Preloaded methods go here. use subs qw( printl println ln lne lnf printfln sprintfln warnfln diefln ind indn indb indstr tabs indblock ); our $_indentation = 0; our @_indenthistory = ( 0 ); our $_newline = "\n";
our $space = ' ';
our $tabsize = 5; our $percent_s_quote = "'"; sub _translate_fmt { $_[0] =~ s/((?<!%)%[\d\-\.]*[S|D])/"$percent_s_quote".lc $1."$percent_s_quote"/ge; }
sub printl { print indstr() if indstr(); return print @_; }
sub println { push @_, $_ unless @_; return printl @_, $_newline; }
sub ln { println(@_); }
sub printfln { my $fmt = shift; _translate_fmt( $fmt ); $fmt .= $_newline; if( indstr() ) { $fmt = indstr().$fmt; } for( @_ ) { carp "undefined value interpolation" unless defined $_ ; } return printf $fmt, @_; }
sub lnf { printfln(@_); }
sub sprintfl { my $fmt = shift; _translate_fmt( $fmt ); if( indstr() ) { $fmt = indstr().$fmt; } return sprintf $fmt, @_; }
sub sprintfln { my $fmt = shift; _translate_fmt( $fmt ); $fmt .= $_newline; if( indstr() ) { $fmt = indstr().$fmt; } return sprintf $fmt, @_; }
sub warnfln { warn( sprintfln( @_ ) ); }
sub diefln { die( sprintfln( @_ ) ); }
sub ind { my $indval = shift; if( defined $indval ) { if( $indval >= 0 ) { if( $_indenthistory[-1] != $indval ) { push( @_indenthistory, $_indentation = $indval ); } } else { die 'indentation value is out of rang (>=0)'; } } return $_indentation+0; }
sub indn { my $indval = ind() || 0; return ind( $indval + 1 )+0; }
sub indb { if( @_indenthistory > 0) { pop @_indenthistory; $_indentation = $_indenthistory[-1] if @_indenthistory; } else { $_indentation-- if $_indentation > 0; } return $_indentation+0; }
sub indreset { @_indenthistory = ( 0 ); $_indentation = 0; return $_indentation+0; }
sub tabs { my $size = shift; if( $size >= 0 ) { $tabsize = $size; } return $tabsize; }
sub indstr { return '' unless $_indentation; return $space x ( $_indentation * $tabsize ); }
sub nl { return join (' ', @_ ).$_newline; } sub indblock { @_ = split /$_newline/, $_[0]; my @result; my $i = indstr(); for( @_ ) { s/^\s*/$i/gmi; push @result, $_; } return (@result, $_newline); } package IO::Handle; use Carp; sub printfln { @_ >= 2 or die 'usage: $io->printf(FMT,[ARGS])'; my $this = shift; my $fmt = shift; IO::Extended::_translate_fmt( $fmt ); $fmt .= $_newline; if( IO::Extended::indstr() ) { $fmt = IO::Extended::indstr().$fmt; } for( @_ ) { carp "undefined value interpolation" unless defined $_ ; } return printf $this $fmt, @_; } sub lnf { printfln(@_); } sub println { @_ or die 'usage: $io->print(ARGS)'; my $this = shift; if( my $indent = IO::Extended::indstr() ) { print $this $indent; } push @_, $_ unless @_; print $this @_ , $_newline; } sub ln { println(@_); } sub printl { @_ or die 'usage: $io->print(ARGS)'; my $this = shift; if( my $indent = IO::Extended::indstr() ) { print $this $indent; } print $this @_; } 1; __END__