#!/usr/bin/perl | |
# | |
# Filename: | |
# --------- | |
# DataManipulation.pl | |
# | |
# Description: | |
# ------------ | |
# Functions for data manipulation. | |
# | |
# Auther: | |
# ------- | |
# Shinn Lin | |
# | |
# Note: | |
# ----- | |
# none. | |
# | |
# Log: | |
# ----- | |
# 2007/05/04 Create. | |
# | |
#BEGIN { push @INC, 'U:\\00MyPerlLib'} # add additional library path | |
package DataManipulation; # declare package library | |
use strict; | |
#****************************************************************************** | |
# Global Data | |
#****************************************************************************** | |
#****************************************************************************** | |
# Export Function | |
#****************************************************************************** | |
return 1; # return true | |
#****************************************************************************** | |
# FUNCTION | |
# clone | |
# DESCRIPTION | |
# clone data from source to destination | |
# PARAMETERS | |
# para 1 - reference to source data | |
# para 2 - reference to destination data | |
# RETURNS | |
# none | |
#****************************************************************************** | |
sub clone() | |
{ | |
my $src_ref; | |
my $dest_ref; | |
($src_ref, $dest_ref) = @_; | |
# check if types of src and dest are the same | |
die "can't clone different type [".ref($src_ref)."][".ref($dest_ref)."]\n" if (ref($src_ref) ne ref($dest_ref)); | |
# clone reference-to-hash | |
if (ref($src_ref) eq "HASH") | |
{ | |
%{$dest_ref} = (); | |
while (my ($key, $value) = (each %{$src_ref})) | |
{ | |
if(ref($value) eq "HASH") | |
{ | |
%{${$dest_ref}{$key}} = (); | |
clone( $value, \%{${$dest_ref}{$key}}); | |
} | |
elsif (ref($value) eq "ARRAY") | |
{ | |
@{${$dest_ref}{$key}} = (); | |
clone( $value, \@{${$dest_ref}{$key}}); | |
} | |
else | |
{ | |
${$dest_ref}{$key} = $value; | |
} | |
} | |
} | |
# clone reference-to-array | |
elsif (ref($src_ref) eq "ARRAY") | |
{ | |
@{$dest_ref} = (); | |
for (my $i=0; $i<scalar(@{$src_ref}); $i++) | |
{ | |
if(ref(${$src_ref}[$i]) eq "HASH") | |
{ | |
%{${$dest_ref}[$i]} = (); | |
clone( ${$src_ref}[$i], \%{${$dest_ref}[$i]}); | |
} | |
elsif (ref(${$src_ref}[$i]) eq "ARRAY") | |
{ | |
@{${$dest_ref}[$i]} = (); | |
clone( ${$src_ref}[$i], \@{${$dest_ref}[$i]}); | |
} | |
else | |
{ | |
${$dest_ref}[$i] = ${$src_ref}[$i]; | |
} | |
} | |
} | |
else | |
{ | |
$$src_ref = $$dest_ref; | |
} | |
} | |
sub printObject() | |
{ | |
my $src_ref; | |
($src_ref) = @_; | |
# clone reference-to-hash | |
if (ref($src_ref) eq "HASH") | |
{ | |
while(my ($key, $value) = (each %{$src_ref})) | |
{ | |
print $src_ref."[".$key."] = ".$value."\n"; | |
if((ref($value) eq "HASH") || (ref($value) eq "ARRAY")) | |
{ | |
&printObject($value); | |
} | |
} | |
} | |
# clone reference-to-array | |
elsif(ref($src_ref) eq "ARRAY") | |
{ | |
for (my $i=0; $i<scalar(@{$src_ref}); $i++) | |
{ | |
print $src_ref."[".$i."] = ".${$src_ref}[$i]."\n"; | |
if((ref(${$src_ref}[$i]) eq "HASH") || (ref(${$src_ref}[$i]) eq "ARRAY")) | |
{ | |
&printObject(${$src_ref}[$i]); | |
} | |
} | |
} | |
else | |
{ | |
} | |
} | |
#****************************************************************************** | |
# Internal Data | |
#****************************************************************************** | |
#****************************************************************************** | |
# Program Start | |
#****************************************************************************** | |
#****************************************************************************** | |
# Internal Function | |
#****************************************************************************** | |
#****************************************************************************** | |
# FUNCTION | |
# xxx | |
# DESCRIPTION | |
# xxx | |
# PARAMETERS | |
# xxx | |
# RETURNS | |
# xxx | |
#****************************************************************************** | |
#****************************************************************************** | |
# FUNCTION | |
# timeCheck | |
# DESCRIPTION | |
# print current time (in sec.) and time-difference to previous check if exists | |
# PARAMETERS | |
# none | |
# RETURNS | |
# current time and time difference if exists (both in sec.) | |
#****************************************************************************** | |
my $timePrev = 0; | |
sub timeCheck() | |
{ | |
my $prePrintStr; | |
my $postPrintStr; | |
my $timeCurr = time(); | |
my $timeDiff = 0; | |
($prePrintStr, $postPrintStr) = @_; | |
print "$prePrintStr" if ($prePrintStr ne ""); | |
print "[Time: ".$timeCurr." sec."; | |
if ($timePrev > 0) # previous-time exists | |
{ | |
$timeDiff = $timeCurr - $timePrev; | |
print "(Diff = $timeDiff)"; | |
} | |
print "]"; | |
print "$postPrintStr" if ($postPrintStr ne ""); | |
print "\n\n"; | |
$timePrev = $timeCurr; | |
return $timeDiff; | |
} |