-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimport.tmpl02.pl
96 lines (77 loc) · 3 KB
/
import.tmpl02.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#! /usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
use Scalar::Util qw(looks_like_number);
use Time::Local qw( timelocal_posix );
use List::Util qw(
head tail uniqstr uniqnum uniq pairs any all none notall first max maxstr min minstr product sum sum0 pairs pairkeys pairvalues shuffle
);
=pod
PREPLISH template file.
Import and use. Make your own!
=cut
# list args
if (scalar(@ARGV)==0){ say "( ".__LINE__." No command-line args received. )"; }
#handle args that may be quoted
else {
my $bMkStr=0;
my @aArgs=();
my @aTmp=();
my $bDbg=1;
say mksqbracks(__LINE__). "$0 argc=". scalar(@ARGV).", args: ". join(" ;; ", @ARGV);
my @aSpltARGV=split(/\s+/,join(' ', @ARGV));
say mksqbracks(__LINE__). "$0 rev argc=". scalar(@aSpltARGV).", args: ". join(" ;; ", @aSpltARGV);
for my $arg (@aSpltARGV){
if( $arg =~ /^\"/ && $arg =~ /[^\"]$/) { $bMkStr =1; push @aTmp, $arg; if($bDbg) { say mksqbracks(__LINE__). "start quoted arg $arg"; } }
elsif( $arg =~ /\"$/ && $arg =~ /^[^\"]/ ) {
$bMkStr = 0; push @aTmp, $arg; push @aArgs, join(" ", @aTmp); @aTmp=();
if($bDbg) { say mksqbracks(__LINE__). "end quoted arg $arg"; }}
elsif( $bMkStr==1 ){ push @aTmp, $arg; if($bDbg) { say mksqbracks(__LINE__). "continue quoted arg $arg"; }}
else { push @aArgs, $arg; if($bDbg) { say mksqbracks(__LINE__). "add simple arg $arg"; }}
}
say mksqbracks(__LINE__). "Received command-line args: ". join(" // ", @aArgs);
doArgTest01( @aArgs ) ;
doArgTest02( @aArgs ) ;
if(scalar(@aArgs)%2==0) { # even number of args, store as K-V pairs
my %dKVp=();
my $iToggle=0;
while ( my ($idx,$a)=each @aArgs) {
if($iToggle==0) {
$dKVp{$a}=0; $iToggle=1;
}
else { $dKVp{$aArgs[$idx-1]}=$a; $iToggle=0; }
}
say mksqbracks(__LINE__). "KVP args: ". join(" ;; ", map { $_ ." = ". $dKVp{$_} } keys %dKVp);
}
}
#some subroutines
sub mksqbracks { my $v=shift; return "[ $v ] " ; }
sub mkDivider { my $val=shift; say "\n". 'x' x 80 . "_$val\n"; }
sub getkbinput { my $msg=shift; say $msg; my $kbStr=<STDIN>;chomp($kbStr); return $kbStr; }
sub doMsgArf { my $arf=shift; my @ary=@$arf; say mksqbracks($ary[0]). join(" , ",@ary[1..$#ary]);} #where ary[0] is caller __LINE__, for example
sub doArgTest01 { my @ary=@_; unshift @ary, mksqbracks(__LINE__); unshift @ary, "doArgTest01"; doMsgArf(\@ary);}
sub doArgTest02 {
my @ary=@_;
my @acmts=();
#if looks_like_number perform a calculation
#elsif str provide statistics
for my $el (@ary) {
if (looks_like_number($el)) {
if($el%2==0) { push @acmts, "arg{$el} is even number"; }
else { push @acmts, "arg{$el} is odd number"; }
}
else {
my %dChars=();
map { $dChars{$_}++ } split(//,$el);
my @aChars=();
for my $k (sort keys %dChars) { push @aChars, "$k ($dChars{$k})"; }
unshift @aChars, join('',sort keys %dChars);
push @acmts, "arg{$el} L=". length($el) . " UNQ=" . join(" ;; ", @aChars );
}
}
push @ary, "\n";
push @ary, @acmts;
unshift @ary, mksqbracks(__LINE__); unshift @ary, "doArgTest02"; doMsgArf(\@ary);
}