Perl 대응 함수 For JavaScript - 1

세벌쉭   
   조회 8492   추천 0    

갑자기 생각나서 올려봅니다.

과거, 10여년 전쯤 일까요,
한참, 이벤트에 응모할때,
이벤트 응모를 자동화하고,
이벤트 소스코드를 분석하고자,
사용하였던 코드들입니다.

JavaScript 함수들을
Perl 함수로 번역한 것입니다.

작성후, 바로 현장에 투입하였던 코드들이라,
정제되어 있는 코드는 아닙니다.

갑자기 생각나 컴뒤져서,
올리는 글이라,
필요 코드가 다 포함되어 있는지 모르겠네요.

혹시라도,
필요하신 분이 있었으면 좋겠습니다.

삽입되어 있는
# if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }
이런 코드들은 디버깅 코드입니다.
if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }
이렇게 수정하시면 자동 디버깅을 수행합니다.

myPrint 함수가,
이코드에 들어있나 ?
없다면, 추후에 찾아서...


myPrint 함수들은
디버깅을 위해서
삽입된 코드들이므로,
myPrint 함수가 들어간 라인들은
#  myPrint  
처럼 처리하셔도 작동합니다.
(당연히, Perl 문법 규정에 맞게...  # 처리 하셔야)


JavaScript 함수 전체를
Perl 함수로 번역한것은 아니고요,
이벤트 응모, 소스분석에 필요했었던,
함수들만을 번역한것입니다.



#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Java Script Emulation Functions......Start
# Written by SeBulShik(세벌쉭)


sub myJ_parseFloat { # myJ_parseFlot($str, __LINE__);

  # 문자열을 소수로 변환한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($str, $line) = @_;

  return $str;

}


sub myJ_parseInt { # myJ_parseInt($str, $radix, __LINE__);

  # $radix 진수로 구성된, 문자열 $str을 정수로 변환한다. 수수점 이하를 잘라버리고 정수로 변환한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2 && @_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($str, $radix, $line);

  

  # 문자열이 수자로 이루어 져 있는지를 조사

  if(!defined $_[0] || $_[0] !~ /^[0-9a-fA-F.]*$/){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t문자열이 수자로 이루어 지지 않았습니다.\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    #exit();

  }

  

  if(@_ == 2){

    ($str, $line) = @_;

    

    # 수자만으로 이루어진 부분을 선두에서 추출한다.

    ($str) = map m#(^[0-9a-fA-F.,]*)#, $str;

    $str =~ s/,//g;

    

    return int $str;

  }

  if(@_ == 3){

    ($str, $radix, $line) = @_;

    

    # 수자만으로 이루어진 부분을 선두에서 추출한다.

    ($str) = map m#(^[0-9a-fA-F.,]*)#, $str;

    $str =~ s/,//g;

  }

  

  #   $str =~ s/^0*//g;

  #   $str =~ s/^0x//i;

  

  if($radix == 10){

    return int $str;

  }

  if($radix == 16){

    return int(hex $str);

  }

  if($radix == 8){

    return int(oct $str);

  }

  if($radix == 2){

    my @bin_str = split //, $str;

    $str = 0;

    for(my $i=0; $i<@bin_str; $i++){

      $str += ($bin_str[$#bin_str - $i]*(2**$i));

    }

    return int $str;

  }

}


sub myJ_toString { # myJ_toString($number, $radix, __LINE__);

  # 수치 $number을, $radix 진수로된 문자열로 반환한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2 && @_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($number, $radix, $line);

  if(@_ == 2){

    ($number, $line) = @_;

  }

  if(@_ == 3){

    ($number, $radix, $line) = @_;

  }

  if(!defined $radix || $radix eq ''){ $radix = 10; }

  

  #   $str =~ s/^0*//g;

  #   $str =~ s/^0x//i;

  

  if($radix == 10){

    return $number;

  }

  if($radix == 16){

    return sprintf "%X", $number;

  }

  if($radix == 8){

    return sprintf "%o", $number;

  }

  if($radix == 2){

    my $bin_str = '';

    for(my $i=0; $number>=(1<<$i); $i++){

      if($number & (1 << $i)){

        $bin_str = 1 . $bin_str;

      } else{

        $bin_str = 0 . $bin_str;

      }

    }

    $bin_str =~ s/^0*//;

    return $bin_str;

  }

}


sub myJ_appCodeName { # myJ_appCodeName($Document, __LINE__);

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($Document, $line) =  @_;

  # 'User-Agent'      => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',

  # 4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)

  my ($tem) = map m#^User-Agent\s*=>\s*([^/]*)/#m, $Document;

  if(!defined $tem){

    mySave_String($Document, 'Error_Document', __LINE__);

    myError('ERROR', __LINE__);

  }

  #   $tem =~ s/\r//g;

  #   $tem =~ s/\n//g;

  return $tem;

}


sub myJ_browserLanguage { # myJ_browserLanguage(__LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 1){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  return 'ko';

}


sub myJ_platform { # myJ_platform(__LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 1){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  return 'Win32';

}


sub myJ_appName { # myJ_appName(__LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 1){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  return 'Microsoft Internet Explorer';

}


sub myJ_appVersion { # myJ_appVersion($Document, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($Document, $line) =  @_;

  # 'User-Agent'      => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',

  # 4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)

  my ($tem) = map m#^User-Agent\s*=>\s*[^/]*/(.*)#m, $Document;

  if(!defined $tem){

    mySave_String($Document, 'Error_Document', __LINE__);

    myError('ERROR', __LINE__);

  }

  $tem =~ s/\r//g;

  $tem =~ s/\n//g;

  return $tem;

}


sub myJ_userAgent { # myJ_userAgent$Document, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($Document, $line) =  @_;

  # 'User-Agent'      => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',

  my ($tem) = map m#^User-Agent\s*=>\s*(.*)#m, $Document;

  if(!defined $tem){

    mySave_String($Document, 'Error_Document', __LINE__);

    myError('ERROR', __LINE__);

  }

  $tem =~ s/\r//g;

  $tem =~ s/\n//g;

  return $tem;

}


sub myJ_random { # myJ_random(__LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 1){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($line) = @_;

  # Math.random()의 출력 결과

  # 0.41867057649686

  # 0.4823917484654743

  # 0.40278756518150244

  # 0.034648997781345614

  # 0.0018704329804464792

  # rand : 0과 1사이의 난수를 만든다. 0은 포함하고, 1은 포함하지 않는다.

  while(1){

    my $tem = rand();

    if($tem =~ /^0$/ || $tem =~ /^0.0$/){ next; }

    return $tem;

  }

}


sub myJ_getTime { # myJ_getTime($time, __LINE__);

  # javascript 의 getTime 함수를 에뮬레이트 한다.

  # $time 시간 이후의 1/1000초 단위 초를 만든다.

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($time, $line) = @_;

  

  # time이 0이나, 널인 경우, 현재시간

  if($time == 0 || $time eq '' || $time eq 'new'){

    # 자신인 myJ_getTime함수를 사용하지 않는다.

    #$time = myJ_getTime(0, __LINE__);

    # 1185176012870

    # 1185176013011

    # 1185176013027

    # 1185176013042

    # 1185176013105

    # 1185176013198

    # 1185176013339

    # 1185176017011

    # 1185176017027

    # 항상 13자리의 값을 갖는다.

    $time = time();

    $time .= int(rand 10);

    $time .= int(rand 10);

    $time .= int(rand 10);

    return $time;

  }

  

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  my $count = 0;

  my $count_flag = 0; # 1000회 이상일때 계속해서 출력되는것을 방지한다.

  while(1){

    my $cur_t = time();

    $cur_t .= int(rand 10);

    $cur_t .= int(rand 10);

    $cur_t .= int(rand 10);

    

    # 만일 시스템의 시간을 내일로 설정한다면, $cur_t은 큰값을 가지게 되고 바로 리턴한다.

    # 만일 시스템의 시간을 어제로 설정한다면, $cur_t은 작은 값을 가지게 되고,

    # $cur_t이 충분히 커질때까지, 하루동안 루프를 돌 것이다.

    if($time < $cur_t){

      return $cur_t;

    }

    

    if($count_flag == 0 && $count >= 1000){

      $count_flag = 1;

      print "\n";

      myPrint("$line:myJ_getTime $count 회 반복하였습니다.");

      select undef, undef, undef, 0.1;

    }

    if($count >= 2000){

      print "\n";

      myPrint("$line:myJ_getTime $count 회 반복하였습니다.\n");

      myPrint("$line:시스템의 시간이 조정 된것 같습니다.\n");

      myPrint("$line:프로그램을 종료합니다.\n");

      exit();

    }

    $count++;

  }

}


sub myJ_toGMTString{ # myJ_toGMTString($time, __LINE__);

  # javascript 의 toGMTString 함수를 에뮬레이트 한다.

  # $time 시간을 GMT 시간 문자열로 만든다.

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # Sun, 02 Mar 2003 17:49:58 GMT

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                    #1234567890

  ($time) = map m#^(..........)#, $time;

  my @week  = qw(Sun Mon Tue Wed Thu Fri Sat);

  my @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  # Wed, 20 Jul 1983 16:15:00 UTC

  # Sun, 1 Jul 2007 05:00:43 UTC

  # Sun, 1 Jul 2007 05:02:08 UTC

  # Mon, 23 Jul 2007 06:37:37 UTC

  my $string = sprintf "%s, %d %s %d %02d:%02d:%02d UTC", $week[$wday], $mday, $month[$mon], 1900 + $year, $hour, $min, $sec;

  return $string;

}


sub myJ_getFullYear { # myJ_FullYear($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  # 4자리의 년도를 반환한다.

  return 1900 + $year;

}


sub myJ_getYear { # myJ_getYear($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  # IE 경우, 2000년이후 4자리의 년도를 반환한다.

  # 여기서는 IE의 설정에 따른다

  return 1900 + $year;

}


sub myJ_getMonth { # myJ_getMonth($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  # 실제 달보다, 1작은 값을 반환한다.

  # 1월=0, 2월=1

  return $mon;

}


sub myJ_getDate { # myJ_getDate($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  return $mday;

}


sub myJ_getDay { # myJ_getDay($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  # 0~6범위 값을 가진다. 0=일요일, 1=월요일

  return $wday;

}


sub myJ_getHours { # myJ_getHours($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  return $hour;

}


sub myJ_getMinutes { # myJ_getMinutes($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

  ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  return $min;

}


sub myJ_getSeconds { # myJ_getMinutes($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                   #1234567890

#   ($time) = map m#^(..........)#, $time;

  my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($time);

  return $sec;

}


sub myJ_getMilliseconds { # myJ_getMinutes($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # 펄 형식의 10자리, 초값만을 취한다.

                            #1234567890

  my ($millisecond) = map m#^..........(...)#, $time;

  # 선두에 있는 0을 제거한다.

  $millisecond =~ s/^0*//;

  return $millisecond;

}


sub myJ_getTimezoneOffset { # myJ_getTimezoneOffset($time, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  my ($time, $line) = @_;

  

  # time이, 0이거나 널인 경우, 현재시간

  if($time == 0 || $time eq ''){ $time = myJ_getTime(0, __LINE__); }

  if($time =~ /[^0-9]/){

    myPrint("\t\t인자에 비수자가 들어 있슴.");

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  # $time 인자는 1/1000 단위의 13자리 시간이거나 "0" 값을 가져야한다.

  # 리눅스에서, "date +%s" 명령은 10자리의 초값을 생산한다.

  # 13자리 수자가 아니다면,

  if(length $time != 13){

    myPrint_Variable("\t\t$line:\$time 인자는 13자리의 1/1000 단위 초이어야 합니다.", $time, __LINE__);

    myPrint("\t\t", __LINE__, ":프로그램을 종료합니다.\n");

    

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  

  # getTimezoneOffset : 협정시계시(UTC)와의 시차가 분단위로 반환되지만,

  #                     브라우져나 OS의 종류에 따라서는 정확한 값으로 반환되지 않는 경우가 있습니다.

  # IE 6.0에서 "-540"을 반환한다.

  return '-540';

}


sub myJ_split { # myJ_split($string, $delemeter, __LINE__);

  # 구분문자에, 정규표현식 문자가 들어갈경우, 주의하여야한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $delemeter, $line) = @_;

  # 구분문자에, 정규표현식 문자가 들어갈경우, 주의하여야한다.

  # 구분문자 부분 수정요망

  return split /$delemeter/, $string;

}


sub myJ_join { # myJ_join(\@array, $delemeter, __LINE__);

  # 구분문자에, 정규표현식 문자가 들어갈경우, 주의하여야한다.

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($array, $delemeter, $line) = @_;

  # 구분문자에, 정규표현식 문자가 들어갈경우, 주의하여야한다.

  # 구분문자 부분 수정요망

  return join "$delemeter", @$array;

}


sub myJ_charCodeAt { # myJ_charCodeAt($str, $index, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($str, $index, $line) = @_;

  if(!defined $str || $str eq '' || !defined $index || !($index =~ /^[0-9]*$/)){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }


  my @str_array = split //, $str;

  # $index가 문자열의 마자막 문자의 위치보다 크면, 에러

  if($index > $#str_array){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  return ord $str_array[$index];

}


sub myJ_charAt { # myJ_charAt($str, $index, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($str, $index, $line) = @_;

  if(!defined $str || $str eq '' || !defined $index || !($index =~ /^[0-9]*$/)){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myError('ERROR', __LINE__);

  }

  return substr($str, $index, 1);

}


sub myJ_replace { # myJ_replace($str, $regex_str, $replace_str, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 4){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  # $str         : 대상 문자열

  # $regex_str   : 정규표현식(/까지 포함한 문자열이다.) 예, $regex_str ==> /\?u=4&XU=/g

  # $replace_str : 대치시키기 위한 문자열

  # $option      : gi등의 옵션, 전체, 대소문자 구별 안함

  

  my ($str, $regex_str, $replace_str, $line) = @_;

  my $option = map m#/(.*)$#, $regex_str;

  if($DEBUG==1){ myPrint_Variable('$option', $option, __LINE__); }

  

  if($DEBUG==1){ myPrint_Variable('$regex_str', $regex_str, __LINE__); }

  $regex_str = map m#^/(.*?)/[ig]*$#, $regex_str;

  if($DEBUG==1){ myPrint_Variable('$regex_str', $regex_str, __LINE__); }

  

  if($option =~ /^i$/){ $str =~ s/$regex_str/$replace_str/i; }

  if($option =~ /^g$/){ $str =~ s/$regex_str/$replace_str/g; }

  if($option =~ /^ig$/){ $str =~ s/$regex_str/$replace_str/ig; }

  return $str;

}


sub myJ_Boolean { # myJ_Boolean($tested, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($tested, $line) = @_;

  #   if(!defined $tested){

  #     myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

  #     myPrint_Array('@_', @_, __LINE__);

  #     myError('ERROR', __LINE__);

  #   }

  # 자바스크립트에서

  # 거짓 : 0 과 공백문자열

  # 참  : 그 이외의 경우

  if(!defined $tested || $tested eq '0' || $tested eq ''){

    return 0;

  } else{

    return 1;

  }

}


sub myJ_indexOf { # myJ_indexOf($string, $search_string, $start_index, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3 && @_ != 4){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $search_string, $start_index, $line);

  

  if(@_ == 3){

    ($string, $search_string, $line) = @_;

    return index($string, $search_string);

  }

  if(@_ == 4){

    ($string, $search_string, $start_index, $line) = @_;

    return index($string, $search_string, $start_index);

  }

}


sub myJ_lastIndexOf { # myJ_lastIndexOf($string, $search_string, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $search_string, $line) = @_;

  return rindex($string, $search_string);

}


sub myJ_substr { # myJ_substr($string, $start, $length, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3 && @_ != 4){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $start, $length, $line);

  if(@_ == 3){

    ($string, $start, $line) = @_;

    $length = length $string;

  }

  if(@_ == 4){

    ($string, $start, $length, $line) = @_;

  }

  if(!($start =~ /^\d+$/)){

    myPrint("두번째 인수(\$start)가 수자가 아닙니다.\n");

    myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Variable('$start', $start, __LINE__);

    myError('ERROR', __LINE__);

  }

  if(!($length =~ /^\d+$/)){

    myPrint("세번째 인수(\$length)가 수자가 아닙니다.\n");

    myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Variable('$length', $length, __LINE__);

    myError('ERROR', __LINE__);

  }

  return substr($string, $start, $length);

}


sub myJ_substring { # myJ_substring($string, $start, $end, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 4){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $start, $end, $line) = @_;

  if(!($start =~ /^\d+$/)){

    myPrint("두번째 인수(\$start)가 수자가 아닙니다.\n");

    myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Variable('$start', $start, __LINE__);

    myError('ERROR', __LINE__);

  }

  if(!($end =~ /^\d+$/)){

    myPrint("세번째 인수(\$end)가 수자가 아닙니다.\n");

    myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Variable('$end', $end, __LINE__);

    myError('ERROR', __LINE__);

  }

  # 자바에서, $start, $end의 순서가 뒤바뀌어도 같은 문자열을 추출한다.

  if($start > $end){

    my $tem = $end;

    $end = $start;

    $start = $tem;

  }

  return substr($string, $start, $end - $start);

}


sub myJ_toLowerCase { # myJ_substring($string, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $line) = @_;

  return lc $string;

}


sub myJ_encodeURIComponent { # myJ_encodeURIComponent($string, '$string의 인코딩', __LINE__)

  # myJ_encodeURIComponent($string, 'euckr', __LINE__);

  # myJ_encodeURIComponent($string, 'utf8', __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 3){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  # WINDOWS XP, 인터넷 익스플로러에서

  # encodeURIComponent 함수로 인코딩한 결과는 다음과 같다.

  # 한글은 utf8로 인코딩된후 인코딩된다.

  # http://shopping.daum.net/product/searchresult.daum?q=한글&b=사랑

  # http%3A%2F%2Fshopping.daum.net%2Fproduct%2Fsearchresult.daum%3Fq%3D%ED%95%9C%EA%B8%80%26b%3D%EC%82%AC%EB%9E%91

  # encodeURI 함수로 인코딩한 결과는 다음과 같다.

  # http://shopping.daum.net/product/searchresult.daum?q=%ED%95%9C%EA%B8%80&b=%EC%82%AC%EB%9E%91

  # escape 함수로 인코딩한 결과는 다음과 같다.

  # http%3A//shopping.daum.net/product/searchresult.daum%3Fq%3D%uD55C%uAE00%26b%3D%uC0AC%uB791

  

  my ($string, $encoding, $line, @string_array);

  ($string, $encoding, $line) = @_;

  

  if($encoding eq 'euckr'){

    # 인코딩을 utf8로 변경하여 준다.

    from_to($string, 'euckr', 'utf8');

  } elsif($encoding eq 'utf8'){

    # 그대로 처리한다.

  } else {

    print "\n";

    myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    myPrint("두번째 인자는 euckr 이거나 utf8 이어야 합니다.\n");

    myError('ERROR', __LINE__);

  }

  

  # 각 1바이트 단위로 잘린다.

  @string_array = split //, $string;

  

  $string = '';

  for(my $i=0; $i<@string_array; $i++){

    # ~!*()-_'. 문자는 인코딩 되지 않는다.

    if(ord($string_array[$i]) >= 0x0 && ord($string_array[$i]) <= 0x7f){

      if($string_array[$i] =~ /\w/ || $string_array[$i] eq '~' || $string_array[$i] eq '!' || $string_array[$i] eq '*' || $string_array[$i] eq '(' || $string_array[$i] eq ')' || $string_array[$i] eq '-' || $string_array[$i] eq '_' || $string_array[$i] eq '\'' || $string_array[$i] eq '.'){

        $string .= $string_array[$i];

        next;

      }

      # ord : 문자를 10진수 아스키 수자로 바꾸어 준다.

      $string .= '%' . sprintf("%X", ord $string_array[$i]);

    } else {

      $string .=  '%' . sprintf("%X", ord $string_array[$i]);

    }

  }

  return $string;

}


sub myJ_decodeURIComponent { # myJ_decodeURIComponent($string, __LINE__);

  # if($DEBUG==1){ myPrint("Called from $_[$#_] line<==", __LINE__, "==>\n"); }

  if(@_ != 2){

    myPrint("\t\tCalled from $_[$#_] line<==", __LINE__, "==>\n");

    myPrint("\t\t==:", $_[$#_], " line:인수 개수 에러\n");

    myPrint_Euckr_Array('@_', @_, __LINE__);

    exit();

  }

  my ($string, $line) = @_;

  # WINDOWS XP, 인터넷 익스플로러에서

  # encodeURIComponent 함수로 인코딩한 결과는 다음과 같다.

  # 한글은 utf8로 인코딩된후 인코딩된다.

  # http://shopping.daum.net/product/searchresult.daum?q=한글&b=사랑

  # http%3A%2F%2Fshopping.daum.net%2Fproduct%2Fsearchresult.daum%3Fq%3D%ED%95%9C%EA%B8%80%26b%3D%EC%82%AC%EB%9E%91

  # encodeURI 함수로 인코딩한 결과는 다음과 같다.

  # http://shopping.daum.net/product/searchresult.daum?q=%ED%95%9C%EA%B8%80&b=%EC%82%AC%EB%9E%91

  # escape 함수로 인코딩한 결과는 다음과 같다.

  # http%3A//shopping.daum.net/product/searchresult.daum%3Fq%3D%uD55C%uAE00%26b%3D%uC0AC%uB791

  

  my @string_arr = split //, $string;

  my @escape_hex = (

    '%00', '%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D', '%0E', '%0F',

    '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18', '%19', '%1A', '%1B', '%1C', '%1D', '%1E', '%1F',

    '%20', '%21', '%22', '%23', '%24', '%25', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', '%2D', '%2E', '%2F',

    '%30', '%31', '%22', '%23', '%34', '%35', '%36', '%37', '%38', '%39', '%3A', '%3B', '%3C', '%3D', '%3E', '%3F',

    '%40', '%41', '%42', '%43', '%44', '%45', '%46', '%47', '%48', '%49', '%4A', '%4B', '%4C', '%4D', '%4E', '%4F',

    '%50', '%51', '%52', '%53', '%54', '%55', '%56', '%57', '%58', '%59', '%5A', '%5B', '%5C', '%5D', '%5E', '%5F',

    '%60', '%61', '%62', '%63', '%64', '%65', '%66', '%67', '%68', '%69', '%6A', '%6B', '%6C', '%6D', '%6E', '%6F',

    '%70', '%71', '%72', '%73', '%74', '%75', '%76', '%77', '%78', '%79', '%7A', '%7B', '%7C', '%7D', '%7E', '%7F',

    '%80', '%81', '%82', '%83', '%84', '%85', '%86', '%87', '%88', '%89', '%8A', '%8B', '%8C', '%8D', '%8E', '%8F',

    '%90', '%91', '%92', '%93', '%94', '%95', '%96', '%97', '%98', '%99', '%9A', '%9B', '%9C', '%9D', '%9E', '%9F',

    '%A0', '%A1', '%A2', '%A3', '%A4', '%A5', '%A6', '%A7', '%A8', '%A9', '%AA', '%AB', '%AC', '%AD', '%AE', '%AF',

    '%B0', '%B1', '%B2', '%B3', '%B4', '%B5', '%B6', '%B7', '%B8', '%B9', '%BA', '%BB', '%BC', '%BD', '%BE', '%BF',

    '%C0', '%C1', '%C2', '%C3', '%C4', '%C5', '%C6', '%C7', '%C8', '%C9', '%CA', '%CB', '%CC', '%CD', '%CE', '%CF',

    '%D0', '%D1', '%D2', '%D3', '%D4', '%D5', '%D6', '%D7', '%D8', '%D9', '%DA', '%DB', '

반갑습니다.
세벌쉭 05-25
sub myJ_decodeURIComponent
함수 부터 (글자수 제한 때문인가) 잘렸네요....

[내용에 올바르지 않은 코드가 다수 포함되어 있습니다.]

제한이 풀리면
나머지 코드도...
세벌쉭 05-25
myError 함수 라인들도...
#  myError 처리 하시면 되겠습니다.
(물론, Perl 문법에 맞게...)
세벌쉭 05-26
제목을
Perl Library For JavaScript - 1
로 수정... 하고 싶지만...
답글을 다 삭제하고...
다시.... 올려야... 가능^^




제목Page 2/17
05-25   8493   세벌쉭
05-25   6138   세벌쉭
05-25   5482   세벌쉭
05-26   5206   세벌쉭
05-26   4753   세벌쉭
05-18   5588   스캔l민현기
05-13   5466   Midabo
05-13   5760   eugeneshin
05-13   5499   eugeneshin
05-08   6184   chobo
05-02   6864   RuBisCO
04-29   6773   간장게장
04-11   8334   김황중
05-11   4654   색작업자
04-09   6024   모스월드
04-03   7870   프로시아
04-01   5888   세벌쉭
03-31   6672   삼육공야드
03-26   4735   세벌쉭
03-26   4128   세벌쉭