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'

게시물: 102 건, 현재: 1 / 2 쪽
번호 제       목 작성자 등록일 방문
109  UTF-8, EUC-KR JMJS 19.12.15 1
108  wget.pl LWP Simple get JMJS 19.9.17 30
100  jsame.pl JMJS 09.5.21 1502
99  jos.pl JMJS 08.11.29 1233
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1306
97  vhdl.pm JMJS 08.11.29 1271
96  jreg.pl JMJS 08.11.29 1284
95  jtree.pm JMJS 08.11.29 1335
94  w2c.pl JMJS 08.11.29 1296
93  jdread.pl JMJS 08.11.29 1102
92  ffile.zip ffilediff.pl JMJS 09.4.24 1150
91  rgb2ycbcr.pl JMJS 10.5.12 1394
90  proview.pl JMJS 08.11.29 1470
89  smi_shift.pl JMJS 10.10.3 1134
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1302
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 950
86  opendir, readdir, closedir JMJS 08.10.12 1246
85  tr a-z A-Z JMJS 08.10.3 1055
84  JARRAY->jfunc JMJS 08.10.2 1057
83  수치함수 - ... JMJS 09.5.7 1460
82  역행렬3x3 JMJS 09.5.7 1576
81  hex2int.pl JMJS 10.9.12 2266
80  stat - file status 보기 JMJS 07.12.16 1153
79  Perl Tip JMJS 09.7.20 2235
78  SMI file sync delay JMJS 07.7.18 1252
77  rmword.pl JMJS 07.6.18 1165
76  [Perl]package AP jinsung 07.2.28 1081
75  [Perl]read_dir.pl JMJS 07.2.22 1339
74  [Perl]jtab2char - tab문자를 특정 char로 바꿔주기 JMJS 07.2.22 1272
73  Perl 숫자 Sorting JMJS 11.5.17 1422
72  [CGI]GET and POST JMJS 06.11.20 2970
71  Perl Grammer JMJS 06.9.4 2537
70  표준 모듈 JMJS 06.8.10 1560
69  Getopt::Long example JMJS 06.8.10 1739
68  array of array JMJS 06.4.22 1161
67  [HTML]테이블 배경에 그림넣기 JMJS 06.3.8 1253
66  l2w.pm - line to word JMJS 08.12.1 1226
65  make_random_chars JMJS 05.8.10 1097
64  mail 보내는 script JMJS 05.3.23 1048
63  실행파일을 실행시키고 표준에러 읽기 JMJS 09.2.25 1063
62  팝업창(공지창)띄우기 Jinsung 03.12.16 2105
61  print <<ENDLINE JMJS 03.12.5 1149
60  [HTML]Target JMJS 03.5.21 1173
59  [Perl]jutil.pm JMJS 03.5.3 1386
58  [Perl]jdiff.pl JMJS 02.6.6 1311
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1354
56  [HTML]자동으로 다른 페이지 이동 JMJS 02.1.19 1206
55  Perl 설치하기 - ActiveWare JMJS 02.1.16 1202
54  opendir , readdir , closedir JMJS 02.1.4 1236
53  rand_diff JMJS 01.10.23 1139
52  vcd2v.pl JMJS 15.8.25 1210
51  file upload JMJS 01.3.16 1155
50  umask(070) <- chmod o-rwx 진성 01.3.16 1316
49  head2index 진성 01.3.15 1023
48  grep.pl JMJS 11.1.20 1127
47  chr(13) = \M 진성 01.3.15 1012
46  stty JMJS 01.3.12 1127
45  des.pl JMJS 01.3.8 1057
44  chr_plus.pl JMJS 01.3.8 1078
43  get passwd in unix JMJS 19.8.18 960
42  unsort JMJS 19.9.10 1187
41  read from website web JMJS 19.5.15 976
40  vec JMJS 01.3.8 1245
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1140
38  [Perl Tk] 도스창 없이, 펄 Tk 스크립트 실행하기; ... JMJS 17.9.30 1071
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1187
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1257
35  mkmm.pl - make freemind JMJS 12.5.22 1210
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1228
33  .xls output csv 파일에 \n "가 있을때 JMJS 11.4.13 1092
32  jdcat.pl juncat.pl JMJS 11.2.24 1229
31  print chr(ord('a')); JMJS 01.3.8 1157
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1092
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1193
28  remove blank $abc =~ s/[\s]+//g; JMJS 00.11.15 1139
27  array and for JMJS 00.11.14 993
26  홈페이지 자동 이동 JMJS 00.10.28 1030
25  html에서 쓰이는 기호표시방법 JMJS 00.9.30 982
24  배열의 범위 연산자 JMJS 00.9.20 1261
23  for(1..3) { print "$_";} JMJS 09.4.24 985
22  package JMJS 00.9.18 1016
21  줄에서 한글자 고치기 JMJS 00.8.7 1094
20  hotkey function by getc JMJS 00.7.21 1195
19  read, sysread, syswrite JMJS 00.7.21 1981
18  crypt JMJS 00.7.13 1260
17  csv2gan.pl JMJS 11.4.4 1311
16  hexa JMJS 00.7.7 1134
15  file in out.pl JMJS 00.7.5 1315
14  ARGV JMJS 00.7.5 1161
13  jtime.pm - localtime, timelocal JMJS 09.4.9 1636
12  @INC JMJS 00.7.5 1509
11  $#myarray JMJS 00.7.5 1263
10  Hash of Array JMJS 00.7.5 1074
9  package JARRAY JHASH JMJS 00.7.4 1287
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1260
7  치환 전이 JMJS 00.7.4 1090
6  file lock JMJS 00.7.4 1195
5  gettime JMJS 00.7.4 1165
4  [Perl]jcdread.pl JMJS 00.7.4 1272
3  [Perl]jdread.pl JMJS 00.7.4 1143
[1] [2]