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 1316
99  jos.pl JMJS 08.11.29 1145
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1185
97  vhdl.pm JMJS 08.11.29 1154
96  jreg.pl JMJS 08.11.29 1169
95  jtree.pm JMJS 08.11.29 1164
94  w2c.pl JMJS 08.11.29 1186
93  jdread.pl JMJS 08.11.29 1030
92  ffile.zip ffilediff.pl JMJS 09.4.24 1073
91  rgb2ycbcr.pl JMJS 10.5.12 1221
90  proview.pl JMJS 08.11.29 1308
89  smi_shift.pl JMJS 10.10.3 1037
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1182
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 863
86  opendir, readdir, closedir JMJS 08.10.12 1131
85  tr a-z A-Z JMJS 08.10.3 949
84  JARRAY->jfunc JMJS 08.10.2 951
83  수치함수 - ... JMJS 09.5.7 1290
82  역행렬3x3 JMJS 09.5.7 1441
81  hex2int.pl JMJS 10.9.12 2119
80  stat - file status 보기 JMJS 07.12.16 1003
79  Perl Tip JMJS 09.7.20 1936
78  SMI file sync delay JMJS 07.7.18 1144
77  rmword.pl JMJS 07.6.18 1040
76  [Perl]package AP jinsung 07.2.28 984
75  [Perl]read_dir.pl JMJS 07.2.22 1203
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1132
73  Perl 숫자 Sorting JMJS 11.5.17 1275
72  [CGI]GET and POST JMJS 06.11.20 2463
71  Perl Grammer JMJS 06.9.4 2017
70  표준 모듈 JMJS 06.8.10 1427
69  Getopt::Long example JMJS 06.8.10 1624
68  array of array JMJS 06.4.22 1047
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1144
66  l2w.pm - line to word JMJS 08.12.1 1104
65  make_random_chars JMJS 05.8.10 988
64  mail 보내는 script JMJS 05.3.23 982
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 951
62  팝업창(공지창)띄우기 Jinsung 03.12.16 1854
61  print <<ENDLINE JMJS 03.12.5 1035
60  [HTML]Target JMJS 03.5.21 1069
59  [Perl]jutil.pm JMJS 03.5.3 1159
58  [Perl]jdiff.pl JMJS 02.6.6 1206
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1231
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1135
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1089
54  opendir , readdir , closedir JMJS 02.1.4 1137
53  rand_diff JMJS 01.10.23 1024
52  vcd2v.pl JMJS 15.8.25 1133
51  file upload JMJS 01.3.16 1021
50  umask(070) <- chmod o-rwx 진성 01.3.16 1208
49  head2index 진성 01.3.15 931
48  grep.pl JMJS 11.1.20 1023
47  chr(13) = \M 진성 01.3.15 950
46  stty JMJS 01.3.12 1039
45  des.pl JMJS 01.3.8 944
44  chr_plus.pl JMJS 01.3.8 971
43  test JMJS 09.7.20 888
42  test JMJS 09.7.20 1080
41  test JMJS 09.7.20 908
40  vec JMJS 01.3.8 1117
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1025
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 954
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1084
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1099
35  mkmm.pl - make freemind JMJS 12.5.22 1095
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1108
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1017
32  jdcat.pl juncat.pl JMJS 11.2.24 1114
31  print chr(ord('a')); JMJS 01.3.8 1048
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 989
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1068
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1021
27  array and for JMJS 00.11.14 895
26  홈페이지 자동 이동 JMJS 00.10.28 961
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 906
24  배열의 범위 연산자 JMJS 00.9.20 1116
23  for(1..3) { print "$_";} JMJS 09.4.24 924
22  package JMJS 00.9.18 944
21  줄에서 한글자 고치기 JMJS 00.8.7 997
20  hotkey function by getc JMJS 00.7.21 1054
19  read, sysread, syswrite JMJS 00.7.21 1841
18  crypt JMJS 00.7.13 1067
17  csv2gan.pl JMJS 11.4.4 1205
16  hexa JMJS 00.7.7 1047
15  file in out.pl JMJS 00.7.5 1176
14  ARGV JMJS 00.7.5 1061
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1420
12  @INC JMJS 00.7.5 1386
11  $#myarray JMJS 00.7.5 1128
10  Hash of Array JMJS 00.7.5 974
9  package JARRAY JHASH JMJS 00.7.4 1088
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1130
7  치환 전이 JMJS 00.7.4 966
6  file lock JMJS 00.7.4 1053
5  gettime JMJS 00.7.4 1057
4  [Perl]jcdread.pl JMJS 00.7.4 1134
3  [Perl]jdread.pl JMJS 00.7.4 1010
2  Hash Example JMJS 00.6.27 1049
1  DESTROY JMJS 09.7.20 1004
[1] [2]