red01\nred02\n…を出すスクリプト。
red01
red02
red03
red04
みたいなのを、
command red 01 - 04
#! /usr/bin/perl use strict; use warnings; my $arg = join " ", @ARGV; for( split /,/, $arg ){ my( $word, $numbers ) = /(\w+?)\s*([\d\-\s]+)/; next unless defined $word and defined $numbers; # $numbersが、単に数字だけだったらそのまま出力。 if( $numbers =~ /^\s*\d+\s*$/ ){ ( $numbers ) = ( $numbers =~ /^\s*(\d+)\s*$/ ); # 空白の除去。 print $word, $numbers, "\n"; next; } my( $number_min, $number_max ) = ( $numbers =~ /(\d+)\s*\-\s*(\d+)/ ); next unless defined $number_min and defined $number_max; for( $number_min .. $number_max ){ print $word, $_, "\n"; } }
#! /usr/bin/perl use strict; use warnings; my $arg = join " ", @ARGV; for( split /,/, $arg ){ my( $word, $numbers ) = /(\w+)\s*([\d\-\s]+)/; next unless defined $word and defined $numbers; # $numbersが、単に数字だけだったらそのまま出力。 if( $numbers =~ /^\d+$/ ){ print $word, $numbers, "\n"; next; } my( $number_min, $number_max ) = ( $numbers =~ /(\d+)\s*\-\s*(\d+)/ ); next unless defined $number_min and defined $number_max; my $zero_padding = 0; # 頭に0付けるかどうか。 my $ketasuu = 1; # 付けるときの桁数。 if( $number_min =~ /^0/ ){ $zero_padding = 1; $ketasuu = length $number_min; # 文字数、というか、数字数。 } for( $number_min .. $number_max ){ if( $zero_padding ){ printf( $word . "%0" . $ketasuu . "d\n", $_ ); }else{ print $word, $_, "\n"; } } }
*1:あ、golf-1とかは無理だ、"-"が。