The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl

use Env::PS1 qw/$PS1/;

my @demo = (
	username => '\u',
	'current dir' => '\w',
	'basename current dir' => '\W',
	hostname => '\H',
	'short hostname' => '\h',
	'basename $0' => '\s',
	date => '\d',
	'terminaldevice basename' => '\l',
	'terminal device' => '\L',
	time => '\t',
	time => '\T',
	time => '\@',
	time => '\A',
);

my ($i, $l) = (0, 0);
length($_) > $l and $l = length($_) for grep {++$i % 2} @demo;
$l += 2;

print "Most escapes are one character long, like these:\n";

while (@demo) {
	my ($k, $v) = ( shift(@demo), shift(@demo) );
	$ENV{PS1} = $v;
	print $k, ' 'x($l - length($k)), "$v  =  $PS1\n";
}

print "\nAlso their are two escapes with arguments:\n";

$ENV{PS1} = '\\D{%a %b %e %H:%M:%S %Y}';
print "strftime format    \\D{\%a \%b \%e \%H:\%M:\%S \%Y}\n\t= $PS1\n";

$ENV{PS1} = q(\\C{bold,red}shiny isn't it ?\\C{reset});
print "and ANSI colours   \\C{bold,red}shiny isn't it ?\\C{reset}\n\t= $PS1\n";

$ENV{PS1} = '\\P{%u up %w users, loadavg: %L}';
print "and some proc info \\P{\%u up \%w users, loadavg: \%L}\n\t= $PS1\n";

print "\nAnd now for some real prompts:\n\n";

print Env::PS1->sprintf($_), "\n\n" for
	'\C{bold,blue}\u@\H \A \C{green}\W\$\C{reset} ',
	'\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]',
	'\C{green}\D{%H:%M:%S} \W\$\C{reset} ',
	'\C{bold,black}/--( \u@\H )-( \t )-( \w )- * *\n\\\\-- * \$\C{reset} ';
	
__END__

=head1 NAME

example.pl - some prompts demonstrated

=head1 DESCRIPTION

This script demonstrates the module by
showing the supported escape sequences and some prompts.