#!/usr/bin/perl # Learning RPerl, Chapter 5, Exercise 3 # Accept column width followed by one or more input lines, and print lines in a right-justified format # [[[ HEADER ]]] use RPerl; use strict; use warnings; our $VERSION = 0.001_000; # [[[ CRITICS ]]] ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator ## no critic qw(ProhibitExplicitStdin) # USER DEFAULT 4: allow <STDIN> prompt # [[[ SUBROUTINES ]]] sub right_justify_variable { { my void $RETURN_TYPE }; my string_arrayref $input_strings = []; print 'Please input integer column width, then press <ENTER>:', "\n"; my string $column_width_string = <STDIN>; my integer $column_width = string_to_integer($column_width_string); print 'Please input zero or more strings, separated by <ENTER>, ended by <CTRL-D>:', "\n"; while ( my string $input_string = <STDIN> ) { push @{$input_strings}, $input_string; } my integer $ruler_width_tens = 6; # default to ruler line width 60 if ( $column_width > 60 ) { $ruler_width_tens = number_to_integer( $column_width / 10 ) + 1; } print "\n"; print '1234567890' x $ruler_width_tens; print "\n"; foreach my string $input_string ( @{$input_strings} ) { chomp $input_string; print q{ } x ( $column_width - ( length $input_string ) ); print $input_string, "\n"; } return; } # [[[ OPERATIONS ]]] right_justify_variable();