#!/usr/bin/perl #==============================================================================# package main; #==============================================================================# #------------------------------------------------------------------------------# sub envvar2word { #------------------------------------------------------------------------------# my ($aline) = @_; while($aline =~ /\$/) { my @chrs = split('',$aline); $aline = ""; while($chrs[0] ne "\$") { $aline .= $chrs[0]; shift(@chrs); } $avar = ""; shift(@chrs); while($chrs[0] =~ /[\{a-zA-Z0-9\_]/) { if($chrs[0] !~ /[\{\}]/) { $avar .= $chrs[0]; } shift(@chrs); } if($chrs[0] eq "\}") { shift(@chrs);} if($avar) { if($ENV{$avar}) { $aline .= $ENV{$avar};} else { $aline .= "JMJSDOLLAR{$avar}";} } while(@chrs) { $aline .= $chrs[0]; shift(@chrs); } } $aline =~ s/JMJSDOLLAR/\$/g; return($aline); } #------------------------------------------------------------------------------# sub list_extract { #------------------------------------------------------------------------------# my ($num,@tlist) = @_; if(($num < 0)||($num > $#tlist)) { return(@tlist);} elsif($num == 0) { shift(@tlist); return(@tlist);} elsif($num == $#tlist) { pop(@tlist); return(@tlist);} @tlist = (@tlist[0..($num-1)],@tlist[($num+1)..$#tlist]); return(@tlist); } #------------------------------------------------------------------------------# sub list_has { #------------------------------------------------------------------------------# my ($word,@tlist) = @_; my @olist = (); for(my $i=0;$i<=$#tlist;$i++) { if($word eq $tlist[$i]) { push(@olist,$i);} } return @olist; } #------------------------------------------------------------------------------# sub pathoptimize { #------------------------------------------------------------------------------# my ($apath) = @_; my @dirs = split(/\//,$apath); my @newdirs = ($dirs[0]); shift(@dirs); foreach $adir (@dirs) { if( $adir eq "" ) { } elsif( $adir eq "." ) { } elsif(($adir eq "..") && $#newdirs && ($newdirs[$#newdirs] ne "..")) { pop(@newdirs);} else { push(@newdirs,$adir);} } @newdirs; } #------------------------------------------------------------------------------# sub time_chrs { #------------------------------------------------------------------------------# my ($atime) = @_; if(! $atime) { $atime = time;} my ($xs,$xm,$xh,$xdd,$xmm,$xyy,$xwd,$xyd,$xisdst) = localtime($atime); $xmm ++; $xyy += 1900; $atime = sprintf("%4d%02d%02d%02d%02d%02d",$xyy,$xmm,$xdd,$xh,$xm,$xs); my @olist = split(//,$atime); @olist; } #------------------------------------------------------------------------------# sub unilist { #------------------------------------------------------------------------------# my @ilist = @_; my @olist = (); for(my $i=0;$i<=$#ilist;$i++) { my $flag = 0; foreach $oword (@olist) { if($oword eq $ilist[$i]) { $flag = 1;} } if(! $flag) { push(@olist,$ilist[$i]);} } @olist; } #==============================================================================# package JARRAY; #==============================================================================# #------------------------------------------------------------------------------# sub new { #------------------------------------------------------------------------------# my ($class, @data) = @_; my $ref = []; bless $ref, $class; $ref->init(@data); return $ref; } #------------------------------------------------------------------------------# sub init { #------------------------------------------------------------------------------# my ($ref, @data) = @_; $ref->add(@data); } #------------------------------------------------------------------------------# sub add { #------------------------------------------------------------------------------# my ($ref, @data) = @_; if(@data) { @$ref = (@$ref,@data);} } #------------------------------------------------------------------------------# sub jprint { #------------------------------------------------------------------------------# my ($ref,$tab,$hier) = @_; if(! $hier) { $hier = 1;} else { $hier ++;} my $ctab = ""; for(my $i=1;$i<$hier;$i++) { $ctab .= $tab;} my $oline = "$ref = (\n"; for(my $i=0;$i<=$#$ref;$i++) { $alist = $$ref[$i]; $oline .= "$ctab$tab\[$i\]="; if( ref($alist) eq "" ) { $oline .= "$alist\n"; } elsif( ref($alist) eq "SCALAR" ) { $oline .= "$alist\n"; } elsif(ref($alist) eq "ARRAY" ) { $oline .= $alist->jprint($tab,$hier); } elsif( ref($alist) eq "HASH" ) { $oline .= $alist->jprint($tab,$hier); } else { $oline .= $alist->jprint($tab,$hier); } } $oline .= "$ctab)\n"; $oline; } #------------------------------------------------------------------------------# sub list { my ($ref) = @_; return (@$ref); } #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# sub remove { #------------------------------------------------------------------------------# my ($ref, @nums) = @_; my @data = @$ref; @$ref = (); foreach my $i (@nums) { $data[$i] = ();} for($i=0;$i<=$#data;$i++) { if($data[$i]) { $ref->add($data[$i]);} } } #------------------------------------------------------------------------------# sub DESTROY { #------------------------------------------------------------------------------# #rint "Destroy the object at @_.\n"; } #==============================================================================# package JHASH; #==============================================================================# #------------------------------------------------------------------------------# sub new { #------------------------------------------------------------------------------# my ($class, @data) = @_; my $ref = {}; bless $ref, $class; $ref->init(@data); return $ref; } #------------------------------------------------------------------------------# sub init { #------------------------------------------------------------------------------# my ($ref, @data) = @_; $ref->add(@data); } #------------------------------------------------------------------------------# sub add { #------------------------------------------------------------------------------# my ($ref, @data) = @_; if(@data) { %$ref = (%$ref,@data);} } #------------------------------------------------------------------------------# sub jprint { #------------------------------------------------------------------------------# my ($ref,$tab,$hier) = @_; if(! $hier) { $hier = 1;} else { $hier ++;} my $ctab = ""; for(my $i=1;$i<$hier;$i++) { $ctab .= $tab;} my $oline = "$ref = (\n"; foreach $key (keys %$ref) { $oline .= "$ctab$tab\{$key\}=>"; my $alist = %$ref->{$key}; if( ref($alist) eq "" ) { $oline .= "$alist\n"; } elsif( ref($alist) eq "SCALAR" ) { $oline .= "$alist\n"; } elsif( ref($alist) eq "ARRAY" ) { $oline .= $alist->jprint($tab,$hier); } elsif( ref($alist) eq "HASH" ) { $oline .= $alist->jprint($tab,$hier); } else { $oline .= $alist->jprint($tab,$hier); } } $oline .= "$ctab)\n"; $oline; } #------------------------------------------------------------------------------# sub remove { #------------------------------------------------------------------------------# my ($ref, @keys) = @_; my @data = %$ref; %$ref = (); for($i=0;$i<$#data;$i+=2) { my $flag = 0; foreach $akey (@keys) { if($data[$i] eq $akey) { $flag = 1;} } if(! $flag) { $ref->add($data[$i],$data[$i +1]);} } } #------------------------------------------------------------------------------# sub DESTROY { #------------------------------------------------------------------------------# #rint "Destroy the object at @_.\n"; } 1;