LogIn E-mail
설계이야기
[Perl]jutil.pm
# 59 JMJS    03.5.3 08:43

%cat jutil.pl
#!/usr/bin/perl

require "jutil.pm";

my $apath = "./adir/../../../../../\${JUTIL_HOME}_abc/../\${DISPLAY}cdir/../jutil/ffile/bdir/b.v";
$apath = join("/",pathoptimize(envvar2word($apath)));
print "[$apath]\n";
if(-e $apath) { print "$apath exist.\n";}
if(-f $apath) { print "$apath file exist.\n";}
if(-d $apath) { print "$apath dir exist.\n";}

$apath = "\$JUTIL_HOME/ffile//./adir";
$apath = join("/",pathoptimize(envvar2word($apath)));
print "[$apath]\n";
if(-e $apath) { print "$apath exist.\n";}
if(-f $apath) { print "$apath file exist.\n";}
if(-d $apath) { print "$apath dir exist.\n";}

%cat jutil.pm
#!/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;

첨부파일: jutil.pl jutil.pm
게시물: 103 건, 현재: 1 / 2 쪽
번호 제       목 작성자 등록일 방문
110  file2date.pl JMJS 20.1.12 51
109  UTF-8, EUC-KR JMJS 19.12.15 61
108  wget.pl LWP Simple get JMJS 19.9.17 89
100  jsame.pl JMJS 09.5.21 1608
99  jos.pl JMJS 08.11.29 1333
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1371
97  vhdl.pm JMJS 08.11.29 1341
96  jreg.pl JMJS 08.11.29 1345
95  jtree.pm JMJS 08.11.29 1405
94  w2c.pl JMJS 08.11.29 1355
93  jdread.pl JMJS 08.11.29 1153
92  ffile.zip ffilediff.pl JMJS 09.4.24 1204
91  rgb2ycbcr.pl JMJS 10.5.12 1500
90  proview.pl JMJS 08.11.29 1523
89  smi_shift.pl JMJS 10.10.3 1193
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1363
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 1011
86  opendir, readdir, closedir JMJS 08.10.12 1320
85  tr a-z A-Z JMJS 08.10.3 1117
84  JARRAY->jfunc JMJS 08.10.2 1110
83  수치함수 - ... JMJS 09.5.7 1553
82  역행렬3x3 JMJS 09.5.7 1641
81  hex2int.pl JMJS 10.9.12 2342
80  stat - file status 보기 JMJS 07.12.16 1222
79  Perl Tip JMJS 09.7.20 2346
78  SMI file sync delay JMJS 07.7.18 1325
77  rmword.pl JMJS 07.6.18 1237
76  [Perl]package AP jinsung 07.2.28 1131
75  [Perl]read_dir.pl JMJS 07.2.22 1406
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1370
73  Perl 숫자 Sorting JMJS 11.5.17 1479
72  [CGI]GET and POST JMJS 06.11.20 3148
71  Perl Grammer JMJS 06.9.4 2700
70  표준 모듈 JMJS 06.8.10 1621
69  Getopt::Long example JMJS 06.8.10 1806
68  array of array JMJS 06.4.22 1228
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1308
66  l2w.pm - line to word JMJS 08.12.1 1288
65  make_random_chars JMJS 05.8.10 1159
64  mail 보내는 script JMJS 05.3.23 1107
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 1128
62  팝업창(공지창)띄우기 Jinsung 03.12.16 2197
61  print <<ENDLINE JMJS 03.12.5 1213
60  [HTML]Target JMJS 03.5.21 1234
59  [Perl]jutil.pm JMJS 03.5.3 1482
58  [Perl]jdiff.pl JMJS 02.6.6 1378
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1413
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1261
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1258
54  opendir , readdir , closedir JMJS 02.1.4 1300
53  rand_diff JMJS 01.10.23 1199
52  vcd2v.pl JMJS 15.8.25 1266
51  file upload JMJS 01.3.16 1218
50  umask(070) <- chmod o-rwx 진성 01.3.16 1375
49  head2index 진성 01.3.15 1080
48  grep.pl JMJS 11.1.20 1190
47  chr(13) = \M 진성 01.3.15 1066
46  stty JMJS 01.3.12 1185
45  des.pl JMJS 01.3.8 1116
44  chr_plus.pl JMJS 01.3.8 1137
43  get passwd in unix JMJS 19.8.18 1006
42  unsort JMJS 19.9.10 1251
41  read from website web JMJS 19.5.15 1030
40  vec JMJS 01.3.8 1305
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1208
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 1169
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1252
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1328
35  mkmm.pl - make freemind JMJS 12.5.22 1276
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1279
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1154
32  jdcat.pl juncat.pl JMJS 11.2.24 1297
31  print chr(ord('a')); JMJS 01.3.8 1212
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1156
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1253
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1195
27  array and for JMJS 00.11.14 1042
26  홈페이지 자동 이동 JMJS 00.10.28 1084
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 1040
24  배열의 범위 연산자 JMJS 00.9.20 1344
23  for(1..3) { print "$_";} JMJS 09.4.24 1037
22  package JMJS 00.9.18 1069
21  줄에서 한글자 고치기 JMJS 00.8.7 1154
20  hotkey function by getc JMJS 00.7.21 1250
19  read, sysread, syswrite JMJS 00.7.21 2043
18  crypt JMJS 00.7.13 1357
17  csv2gan.pl JMJS 11.4.4 1368
16  hexa JMJS 00.7.7 1188
15  file in out.pl JMJS 00.7.5 1381
14  ARGV JMJS 00.7.5 1223
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1728
12  @INC JMJS 00.7.5 1574
11  $#myarray JMJS 00.7.5 1330
10  Hash of Array JMJS 00.7.5 1135
9  package JARRAY JHASH JMJS 00.7.4 1382
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1324
7  치환 전이 JMJS 00.7.4 1151
6  file lock JMJS 00.7.4 1266
5  gettime JMJS 00.7.4 1220
4  [Perl]jcdread.pl JMJS 00.7.4 1341
[1] [2]