oracle, mysql, pgsql 을 쉽게접속하기위한 함수

(물론 모듈은 각자 구해서 사용함~)


sub db_connect($$$$)

{

    my ($DB_SID, $DB_USER, $DB_PASSWD, $DB_SYSTEM) = @_;


    my $dbh = "";

    my $dsn = "";

    eval {

        $SIG{ALRM} = sub { die "$!"; };

        alarm(2);


        if ($DB_SYSTEM eq "oracle") {

            $dsn = "DBI:Oracle:$DB_SID";

        }

        elsif ($DB_SYSTEM eq "mysql") {

            $dsn = "DBI:mysql:database=$DB_SID";

        }

        else {

            $dsn = "DBI:Pg:dbname=$DB_SID;host=localhost";

        }


        $dbh = DBI->connect($dsn,

                            $DB_USER,

                            $DB_PASSWD,

                            {RaiseError => 1,AutoCommit => 0,PrintError => 1});


        alarm(0);

    };


    if ($@) {

        warn "DBI->connect() timeout";

        warn $@;

        $dbh = undef;

    }


    if (! $dbh) {

        warn "DBI->connect() failed: $!";

        return undef;

    }


    return $dbh;

}




끝.!






앞뒤의 공백을 잘라내버리는 trim함수를

perl 에서 사용하기 위한 함수구현입니다.


sub trim($)

{

    my ($str) = @_;

    $str =~ s/^\s+//g;

    $str =~ s/\s+$//g;

    return $str;

}




끝.


EUC-KR을 UTF-8로 바꿀때 보통

my $euckr_to_utf8 = Text::Iconv->new("EUC-KR","UTF-8");

$ibuf = $euckr_to_utf8->convert($ibuf);

이런식으로 변환을 하게됩니다.


하지만 HP-UX에서는

Unsupported conversion from EUC-KR to UTF-8: 잘못된 인수입니다. at ./test_encoding.pl line 12.

라면서 오류를 뿜습니다.



HP에서는 

    my $euckr_to_utf8 = Text::Iconv->new("eucKR","utf8");

    $ibuf = $euckr_to_utf8->convert($ibuf);

이렇게 eucKR, utf8 이라고 써야 오류없이 변환됩니다.


참고로 gnu iconv 는 euckr, utf-8입니다.



이 정보는 HP홈페이지 기술지원에서 참고하였습니다.


해쉬의 사이즈를 구합니다.

#!/usr/bin/perl


MAIN:

{

    my $test  = {};


    $test->{0}=0;

    $test->{1}=0;

    $test->{2}=0;

    $test->{3}=0;

    $test->{5}=0;


    my $len = scalar(keys %{$test});


    print "$len\n";

}


결과값

5




Perl 에서 DBD-mysql 모듈을 설치했을때 
Mysql기본경로가 다를경우 에러가 발생합니다.



perl Makefile.PL 

을 실행했을시에...

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 83.


Cannot find the file 'mysql_config'! Your execution PATH doesn't seem

not contain the path to mysql_config. Resorting to guessed values!

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located



PLEASE NOTE:


For 'make test' to run properly, you must ensure that the

database user 'root' can connect to your MySQL server

and has the proper privileges that these tests require such

as 'drop table', 'create table', 'drop procedure', 'create procedure'

as well as others.


mysql> grant all privileges on test.* to 'root'@'localhost' identified by 's3kr1t';


You can also optionally set the user to run 'make test' with:


perl Makefile.PL --testuser=username


Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located

Can't exec "mysql_config": 그런 파일이나 디렉토리가 없음 at Makefile.PL line 478.

Can't find mysql_config. Use --mysql_config option to specify where mysql_config is located

Failed to determine directory of mysql.h. Use


  perl Makefile.PL --cflags=-I<dir>


to set this directory. For details see the INSTALL.html file,

section "C Compiler flags" or type


  perl Makefile.PL --help


라는 에러가 발생하네요.


해결방법으로는..

perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config

라고 --mysql_config에 mysql경로를 미리 알려주면 간단히 해결됩니다~




==============================================================

/usr/bin/ld: cannot find -lz

collect2: ld returned 1 exit status

요런 에러가 나타났을땐 zlib 을 설치해야한다.

http://www.zlib.net/  에가서 tar버전을 다운받은후

아래와같은 과정을 거친다.

tar xvfzp zlib-1.2.6.tar.gz
mv zlib-1.2.6 /usr/local/zlib
cd /usr/local/zlib/
./configure -s
make
./configure
make install
ls -alF libz.so* 치면
    lrwxrwxrwx 1 root root    13  2월 20 13:18 libz.so -> libz.so.1.2.6*

    lrwxrwxrwx 1 root root    13  2월 20 13:18 libz.so.1 -> libz.so.1.2.6*

    -rwxr-xr-x 1 root root 92821  2월 20 13:18 libz.so.1.2.6*
cp libz.so* /usr/local/lib
cd /usr/local/lib
rm -rf libz.so libz.so.1
ln -s libz.so.1.2.6 libz.so
ln -s libz.so.1.2.6 libz.so.1
vi /etc/ld.so.conf  ==> /usr/local/lib 추가하고
ldconfig 


이후 make install시 에러가 나지 않고 설치완료된다!




그냥 참고.
쓸때가 생기더라구요.ㅎㅎ
 

sub TEST($)

{

    my ($var_file) = @_;

    print $var_file "Hello world\n";

}


MAIN:

{

    local(*F);

    if ( !open (F, "/usr/local/test.txt" )) {

        print "ERROR : OPEN FILE(/usr/local/test.txt)\n";

        exit(0);

    }

    TEST(F);

    close(F);

}





'업무 > Perl' 카테고리의 다른 글

[perl] Hash 크기 구하기  (0) 2012.02.27
[perl] DBD-mysql 모듈 경로지정해서 설치하기  (0) 2012.02.20
[perl] 어제날짜 구하기  (0) 2012.02.02
[perl] 화면지우기  (0) 2012.01.31
[perl] A~ Z까지 순차적으로 출력하기  (0) 2011.12.15



오늘의 날짜가 1일인데 어제날짜를 구해야하는 프로그램을 짜야할떄..

어제가 30일인지 31일인지.. 또는 2월이 윤달인지 아닌지 참 헷갈리고 수동으로짜야하면 노가다임..ㅠㅠ

그럴때~! 응용하면 되는 프로그램!! ㅎㅎ


use Time::Local;


sub get_yesterday($$$)

{

    my ($y, $m, $d) = @_; #년도, 월, 일을 입력받는다.(날짜지정해서쓸때만 인자받음)

    my ($sec, $min, $hour, $mday, $mon, $year) = (0,0,0,$d,$m-1,$y-1900); #날짜지정해서 쓸때

    #my ($sec, $min, $hour, $mday, $mon, $year) = localtime();  #그냥 현재날짜만 쓸때

    my $yesterday_midday=timelocal(0,0,0,$mday,$mon,$year) - 60*60*24;

    ($sec, $min, $hour, $mday, $mon, $year) = localtime($yesterday_midday);

    my $YesterdaysDate = sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday);

    return $YesterdaysDate; 

}


리턴값 :  20120201 (오늘날짜가 2월2일이라면..)


system("clear");



끝~!

대문자 A 아스키코드 선언

my $asc = 65;

 

문자로 출력하기

print chr($asc);

 

한개씩 증가시키기

$asc++;


1. 그냥 출력하기

#!/usr/bin/perl

use strict;

use POSIX;


MAIN:

{

    my $unix_time = "1322086860";

    my $date = localtime($unix_time);

    print "$date \n";

}


#출력결과

Thu Nov 24 07:21:00 2011




2. 형식에 맞게 출력하기

#!/usr/bin/perl

use strict;

use POSIX;


MAIN:

{

    my $unix_time = "1322086860";

    my $date = POSIX::strftime("%Y/%m/%d %H:%M", localtime($unix_time));

    print "$date\n";

}


#출력결과

2011/11/24 07:21

 

'업무 > Perl' 카테고리의 다른 글

[perl] 화면지우기  (0) 2012.01.31
[perl] A~ Z까지 순차적으로 출력하기  (0) 2011.12.15
[perl] 버클리DB (dbf) 읽는 함수  (0) 2011.11.25
[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 펄로 MySQL 사용하기  (0) 2011.10.29

sub get_dbf($)

{

    my ($old_home) = @_;


    my (%h, $k, $v);

    my $euckr_to_utf8 = Text::Iconv->new("EUC-KR","UTF-8");


    my $filename = $old_home;

    tie %h, "DB_File", $filename;


    my $h_arr = {};

    while (($k, $v) = each %h ) {

       # EUCKR -> UTF8

       $k = $euckr_to_utf8->convert($k);

       $v = $euckr_to_utf8->convert($v);


       # remove (^@ -> \x00) (^M -> \x08) (^E -> \x05)

       $k =~ s/[\t\r\n\x00\x08\x05]//g;

       $v =~ s/[\t\r\n\x00\x08]//g;


       $v =~ s/\x05/\|\^\|/g;


       #my @arr = split(/\|\^\|/, $v, 14);


       $h_arr->{$k}=$v;

    }

    untie %h;

    return $h_arr;

}




그냥 재미삼아 ^^

 내용은 나중에 추가

환경 : 윈7 64bit 딸기펄

 

c:\>cpan -i Bundle::CPAN

 

c:\>cpan

cpan> install Wx

cpan> install PAR

cpan> install PAR::Packer

cpan> install Wx::Perl::Packager

 

 

exe로 만들기

wxpar --gui -o test.exe Notepad.pl


#!/usr/local/mobigen/CrediMail/perl/bin/perl -w

BEGIN {

#$ENV{{IB_PATH} = "/usr/local/mobigen/mysql/lib/mysql";

#$ENV{LD_LIBRARY_PATH} = "/usr/local/mobigen/mysql/lib/mysql";

    push @main::INC, ".";

    push @main::INC, "/usr/local/mobigen/CrediMail/modules";

};

use strict;

use mobigen;

use DBI;


MAIN:

{

    if (! @ARGV) {

        print "Usage : $0 userid \n";

        exit(0);

    }


    my $db = DBI -> connect("DBI:mysql:database=private_db:host=localhost","id","password",{'RaiseError'=> 1}); #알맞게 수정하세요

    print "DB_CONNECT SUCCESS\n";


    my $sql = "SELECT * FROM TABLE";

    my $sth = $db->prepare($sql);

    $sth->execute();

    print "DB_SELECT MAILBOX\n";


    my $mailbox ={};

    while (my @row_ref = $sth->fetchrow_array){

        $mailbox->{$row_ref[0]} = $row_ref[1]} ;

    }

    $sth->finish;


    $db->disconnect();

}



'업무 > Perl' 카테고리의 다른 글

[perl] 버클리DB (dbf) 읽는 함수  (0) 2011.11.25
[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 한라인으로 배열 출력  (0) 2011.10.26
[perl] 정규식 옵션  (0) 2011.10.21
[perl] 현재 날짜 출력하기  (0) 2011.10.21

foreach my $line (@array) {
    print "$line \n";




print $_. "\n" foreach(@array);


요고는 같습니다

 

즉 배열을 있는그대로 출력하고자할때

한줄로 간단하게 줄여쓸수 있다는거죠

'업무 > Perl' 카테고리의 다른 글

[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 펄로 MySQL 사용하기  (0) 2011.10.29
[perl] 정규식 옵션  (0) 2011.10.21
[perl] 현재 날짜 출력하기  (0) 2011.10.21
[perl] 임시...  (0) 2011.09.21


 옵션 설명 
 g  가능한 모든 패턴과 일치
 i  대소문자를 무시
 m  스트링을 다중 행으로 취급
 o  한번만 계산
 s  스트링을 단일 행으로 취급
 x  패턴 내의 공백 문자 무시

 

'업무 > Perl' 카테고리의 다른 글

[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 펄로 MySQL 사용하기  (0) 2011.10.29
[perl] 한라인으로 배열 출력  (0) 2011.10.26
[perl] 현재 날짜 출력하기  (0) 2011.10.21
[perl] 임시...  (0) 2011.09.21

#!/usr/bin/perl

use POSIX;

MAIN:

{

    my $c_date = POSIX::strftime("%Y%m%d%H%M%S", localtime(time()));

    print "$c_date \n";

}


'업무 > Perl' 카테고리의 다른 글

[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 펄로 MySQL 사용하기  (0) 2011.10.29
[perl] 한라인으로 배열 출력  (0) 2011.10.26
[perl] 정규식 옵션  (0) 2011.10.21
[perl] 임시...  (0) 2011.09.21

lt 작다
gt 크다
eq 같다
le 작거나같다
ge 크거나같다
ne 같지않다
cmp 비교후 1,0,-1을 반환

정렬 역정렬
@a=sort(@a) reverse(sort(@a))
localtime(timeval)
int(rand(10))+1;
while($input ne ""){ ... }
for(0..@arrays-1){
print "value = #arrays[$_] \n";
}

shift 첫요소를꺼냄
unshift 첫요소를 추가, 나머지는 하나씩밀림
push 마지막에 요소추가
pop 마지막요소꺼냄

if($var==0){
print "OK\n";
}
print "OK\n" if($var==0);

반복문빠져나오기 last;
루프의 다음수행 next;

@array=(1,2,3,4,5);
$#array <- 4 배열마지막번지

:%s/old/new/gc 확인하며 교체
:7,11s/^/\t/g 7~11행 맨앞에 탭추가


'업무 > Perl' 카테고리의 다른 글

[perl] GUI 프로그램 - Wx 인스톨 절차  (0) 2011.11.09
[perl] 펄로 MySQL 사용하기  (0) 2011.10.29
[perl] 한라인으로 배열 출력  (0) 2011.10.26
[perl] 정규식 옵션  (0) 2011.10.21
[perl] 현재 날짜 출력하기  (0) 2011.10.21

+ Recent posts