LogIn E-mail
설계이야기
Perl Tip
# 79 JMJS    09.7.20 16:43

Perl 디버거
> perl -d Sample.pl
실행후에
s <-- script를 한줄씩 실행
p $a <-- $a의 값을 표시해준다.
q <-- 디버거 종료
h <--- help
 
################### 연산자 ###################
.. : 범위 연산자
@a = (); # Array을 비움
$b = $#a ; # 첨자의 최대값
$b = @a ; Array의 수
delete $a{"name"}; # 키 name를 %a에서 삭제
\$a : $a의 메모리 실제 Address
\@a
\%a
 3가지의 실제 Address는 다 다름
$a = 10;
$b = \$a;
$c = $$b; #c는 a와 같음
$b = \@a;
$d = $b->[0];
*a : 변수이름이 a인 모든 것을 나타냄
$a = [1,2,3]; #무명Array
$a = {"one" => "일"}; #무명 해시
@a = ([10,20],[30,40]); #$a[1][1]은 40임
foreach $a(1,2,3) {..} # $a에 매 iteration 마다 1,2,3, 순차적으로 저장됨

################### 루프의 중단 ###################
last ; #현재 loop를 종료
last LABEL ; #라벨이 붙은 Block을 종료
next ; #현재 loop의 시작위치로 점프
next LABEL ; #라벨이 붙은 Block의 시작 위치로 점프
redo ; #현재 loop Block의 처음으로 돌아감
redo LABEL ; #라벨이 붙은 Block안의 처음으로 점프
LABEL : while($a < 5) {
  :
redo LABEL ;
  :
} continue {...}

################### 메타문자 ###################
. : 임의의 한문자(행 바꿈은 제외)
* : 0회 이상 반복
+ : 1회 이상 반복
? : 0회 또는 1회 반복
^ : 선두
$ : 말미
| : 선택
() : 정규표현 그룹
[] : 문자 클래스
{n} : n회 반복
{n, } : n회 이상 반복
{n,m} : n회 이상 m회 이상 반복
\ : 메타문자를 문자로 취급
\w : 영문자, 숫자와 _
\W : 영문자, 숫자와 _ 이외의 문자
\s : 공백(반각 Space, 탭, 개행)
\S : 공백이외
\d : 숫자
\D : 숫자 이외

최장 매치, 최단 매치
"abcabc" =~ /a.*c/ ; #abcabc 매치됨
"abcabc" =~ /a.*?c/ ; #abc 매치됨

패턴매칭의 결과를 나타내는 특수 변수
$& : 매치하는 String 전체
$` : 매치하는 부분보다 앞에 있는 String
$' : 매치하는 부분보다 뒤에 있는 String
$1, $2, ... : 첫번째, 두번째, .. 그룹에 매치하는 String
$+ : 마지막 그룹에 매치하는 String
 
매치연산자 옵션 $str =~ m/../../
g : 매치하는 것을 모두 찾는다.
i : 대문자와 소문자를 구별하지 않는다.
m : String을 복수행으로 취급한다.
s : String을 단일행으로 취급한다.
x : 패턴 내에 포함되는 반각 Space를 무시한다.

치환연산자 옵션 : $str =~ s/../../
e : 치환 후의 String을 식으로 간주한다.
g : 매치하는 것을 모두 찾는다.
i : 대문자와 소문자를 구별하지 않는다.
m : String을 복수행으로 취급한다.
s : String을 단일행으로 취급한다.
x : 패턴 내에 포함되는 반각 Space를 무시한다.

변환연산자 옵션 : $str =~ tr/.../.../
c : 변환 대상인 String에 포함되지 않는 문자를 변환한다.
d : 변환 후의 String에 포함되지 않는 문자를 삭제한다.
s : 중복된 연속 문자를 1문자로 변환한다.

s/(^.)/\U\1\E/ ; # 첫번째 문자를 대문자로 바꿔라, \U~\E사이에 들어간 문자를 대문자로 바꿔라~

################### 서브루틴 호출 ##################
sub 서브루틴이름 {
...
return ;
}
$a = &서브루틴이름(인수);

################### 패키지 호출 ###################
package 패키지명1 ;
:
package 패키지명2;
:

EX)
$mypack = "main 패키지" ;
:
package pack1 ;
$mypack = "pack1 패키지";
:
sub myprint{
...
}

package pack2 ;
:

print "$pack1::mypack\n";
&pack1::myprint();

################### 변수의 범위 ###################
my($a, @b, ...);
local($a, @b, ...); #서브루틴까지 영향을 미침

################### Library와 Module ###################
1. Library
File의 확장자는 .pl
File끝에 1;를 기술해야함.
ex)
package packl ;
$mypack = "Library" ;
:
1;
Library 읽어들이기
require "packl.pl" ;
print "$packl::mypack\n";

2. Module
File의 확장자는 .pm
File끝에 1;를 기술해야함.
ex)
package packm ;
$mypack = "Module" ;
:
1;

Module 읽어들이기
use packm ;
print "$packm::mypack\n";

################### File 조작 ###################
binmode(FILE1) ; #File 핸들을 바이너리 Mode로 설정

File 테스트 연산자
-e : File이 존재하면 참
-r : 읽기 가능이면 참
-w : 쓰기 가능이면 참
-z: File 크기가 0이면 참
-s : File 크기(File이 존재하지 않으면 거짓)
-T : 텍스트 File이면 참
-B : 바이너리 File이면 참

rename("file.txt", "newfile.txt"); #file.txt를 newfile.txt로 File명 변경

unlink("file.txt"); #File 삭제, 삭제한 File의 수를 Return"

################### 배타제어 ###################
flock(FLIE,2); #FILE File핸들에 락걸기(2)
flock(FLIE,8); #FILE File핸들에 락 해제(8)
CGI(Common Gateway Interface) : 웹브라우저가 요청하면 웹서버가 Program을 실행하는 구조를 말함
chomp($_); # 지정한 String 끝의 개행 문자를 삭제함.

################### 환경변수 ###################
foreach $key (keys %ENV) { print " $key : $ENV{$key}\n";}

################### 시간 ###################
$ct = time;
@now = localtime($ct);

################### 수학 관련 함수 ###################
abs($x);
sqrt($x); # 평방근
exp($x); #e지수
log($x);
sin($x); #단위는 라디안
cos($x);
atan2($x);

$a = 2.58;
$b = int($a); # $b = 2

$a = rand(10); #0~10미만의 범위의 난수를 실수로 Return
$a = rand(); #0~1미만의 범위의 난수를 실수로 Return

srand(임의의 정수); #다음에 실행하는 rand함수의 시드를 설정함.

################### String을 조작하는 함수 ###################
String의 길이
$str = length($a);

String을 추출하거나 치환
$strl1= "ABCEF";
$strl2 = substr($strl1, 2,3); #2번째 문자로부터 3개의 문자를 Return

$strl1= "ABCEF";

$strl2 = substr($strl1, 2,3,"GGGG"); 2번째 문자로 부터 3개의 문자를 GGGG로 치환

String의 첫 위치 구하기
$strl1= "ABCEF";

$strl2 = index($strl1, "E"); #E가 최초로 나타내는 위치 4를 Return한다. 없을 때는 -1를 Return

String을 분할하여 리스트로 만들기
@arr = split(/,/, "I,Love,Cat"); #구분 문자 패턴 ' 을 기준으로 분할하여 리스트에 저장한다

#$arr[0] = "I",$arr[1] = "Love",$arr[2] = "Cat"

################### Array에 관한 함수 ###################
$str = join(" ", ("I","Love","Cat"));
#$str = "I Love Cat"

@a = sort @b;
@a = reverse @b;
$x = pop @a;
$x = shift @a;
push @a, $y; #@a에  $y를 추가. Array도 추가할 수 있다.
unshift @a, $y; #@a의 맨 앞에 $y를 추가. Array도 추가할 수 있다.

@a = grep /^a.*/, @b ; # @bArray에서 정규표현에 매치하는 요소를 추출하여 @aArray에 저장

################### 연상Array에 관한 함수 ###################
@b = keys %a;
@b = value %a;
while(($k, $v) = each %a) { print "$k $v";}

$key = "name";
$b = exist $a{$key}; # %a에 $key라는 key가 있는지 조사하여 1 or 0을 Return한다.

################### Directory 관련 함수 ###################
opendir(DIR, $dirname) || die "opendir Error!\n"; #DIR은 Directory 핸들명, $dirname은 Directory명

@alldir = readdir DIR; #Directory에 존재하는 File의 이름과 Directory의 이름을 Array에 저장한다.현재Directory와 상위 Directory도 포함
closedir(DIR);
$a = mkdir $dirname; #Directory 생성이 성공하면 1, 실패하면 0을 변수에 저장한다.

$a = rmdir $dirname;
chdir $dirname || die "chdir Error!\n";

################### Program 제어에 관한 함수 ###################
$p = "1 + 1";
$a= eval($p); # $a는 1+1= 2이다
exit(0) ; # Program이 종료할 때 System에 Return 값을 지정 0: 정상종료, 이외 값은 이상종료.

die !; #Error가 발생하면 Error Message를 출력하고 Program을 종료한다.

################### Data 변경에 관한 함수 ###################
$a = hex("10"); # hexa:10 -> decimal:16
$a = chr(65); #$a='A'

게시물: 100 건, 현재: 1 / 2 쪽
번호 제       목 작성자 등록일 방문
100  jsame.pl JMJS 09.5.21 1430
99  jos.pl JMJS 08.11.29 1185
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1240
97  vhdl.pm JMJS 08.11.29 1227
96  jreg.pl JMJS 08.11.29 1232
95  jtree.pm JMJS 08.11.29 1263
94  w2c.pl JMJS 08.11.29 1239
93  jdread.pl JMJS 08.11.29 1071
92  ffile.zip ffilediff.pl JMJS 09.4.24 1119
91  rgb2ycbcr.pl JMJS 10.5.12 1325
90  proview.pl JMJS 08.11.29 1394
89  smi_shift.pl JMJS 10.10.3 1091
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1246
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 916
86  opendir, readdir, closedir JMJS 08.10.12 1191
85  tr a-z A-Z JMJS 08.10.3 1001
84  JARRAY->jfunc JMJS 08.10.2 999
83  수치함수 - ... JMJS 09.5.7 1391
82  역행렬3x3 JMJS 09.5.7 1508
81  hex2int.pl JMJS 10.9.12 2209
80  stat - file status 보기 JMJS 07.12.16 1077
79  Perl Tip JMJS 09.7.20 2098
78  SMI file sync delay JMJS 07.7.18 1191
77  rmword.pl JMJS 07.6.18 1097
76  [Perl]package AP jinsung 07.2.28 1026
75  [Perl]read_dir.pl JMJS 07.2.22 1273
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1190
73  Perl 숫자 Sorting JMJS 11.5.17 1342
72  [CGI]GET and POST JMJS 06.11.20 2745
71  Perl Grammer JMJS 06.9.4 2326
70  표준 모듈 JMJS 06.8.10 1502
69  Getopt::Long example JMJS 06.8.10 1681
68  array of array JMJS 06.4.22 1103
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1192
66  l2w.pm - line to word JMJS 08.12.1 1159
65  make_random_chars JMJS 05.8.10 1046
64  mail 보내는 script JMJS 05.3.23 1018
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 1007
62  팝업창(공지창)띄우기 Jinsung 03.12.16 1957
61  print <<ENDLINE JMJS 03.12.5 1084
60  [HTML]Target JMJS 03.5.21 1119
59  [Perl]jutil.pm JMJS 03.5.3 1279
58  [Perl]jdiff.pl JMJS 02.6.6 1265
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1306
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1172
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1145
54  opendir , readdir , closedir JMJS 02.1.4 1179
53  rand_diff JMJS 01.10.23 1086
52  vcd2v.pl JMJS 15.8.25 1187
51  file upload JMJS 01.3.16 1082
50  umask(070) <- chmod o-rwx 진성 01.3.16 1268
49  head2index 진성 01.3.15 972
48  grep.pl JMJS 11.1.20 1082
47  chr(13) = \M 진성 01.3.15 982
46  stty JMJS 01.3.12 1096
45  des.pl JMJS 01.3.8 1009
44  chr_plus.pl JMJS 01.3.8 1026
43  test JMJS 09.7.20 924
42  test JMJS 09.7.20 1131
41  read from website web JMJS 19.5.15 949
40  vec JMJS 01.3.8 1194
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1082
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 1018
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1144
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1188
35  mkmm.pl - make freemind JMJS 12.5.22 1165
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1178
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1056
32  jdcat.pl juncat.pl JMJS 11.2.24 1170
31  print chr(ord('a')); JMJS 01.3.8 1104
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1045
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1130
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1084
27  array and for JMJS 00.11.14 938
26  홈페이지 자동 이동 JMJS 00.10.28 998
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 945
24  배열의 범위 연산자 JMJS 00.9.20 1186
23  for(1..3) { print "$_";} JMJS 09.4.24 959
22  package JMJS 00.9.18 984
21  줄에서 한글자 고치기 JMJS 00.8.7 1049
20  hotkey function by getc JMJS 00.7.21 1126
19  read, sysread, syswrite JMJS 00.7.21 1915
18  crypt JMJS 00.7.13 1176
17  csv2gan.pl JMJS 11.4.4 1258
16  hexa JMJS 00.7.7 1104
15  file in out.pl JMJS 00.7.5 1248
14  ARGV JMJS 00.7.5 1115
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1524
12  @INC JMJS 00.7.5 1460
11  $#myarray JMJS 00.7.5 1195
10  Hash of Array JMJS 00.7.5 1029
9  package JARRAY JHASH JMJS 00.7.4 1199
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1199
7  치환 전이 JMJS 00.7.4 1028
6  file lock JMJS 00.7.4 1119
5  gettime JMJS 00.7.4 1112
4  [Perl]jcdread.pl JMJS 00.7.4 1200
3  [Perl]jdread.pl JMJS 00.7.4 1066
2  Hash Example JMJS 00.6.27 1106
1  DESTROY JMJS 09.7.20 1075
[1] [2]