Kawa.netxp [Perl] KCatch.pm�^CGI �G���[���b�Z�[�W���u���E�U�ɕ\��

�����Ă邾���ň��S����

KCatch.pm �� Perl CGI �Ŕ������� Internal Server Error ��⑫���āA �G���[���e�� HTML �Ƃ��ău���E�U��ʂɕ\�����Ă���郂�W���[���ł��B
�G���[�̔��������s�ԍ��Ȃǂ��\�������̂ŁA�T�[�o��ł̊J���ɍœK�ł��B

CodeRepos �Ƀ\�[�X���ړ����܂����I�i2007/12/23�j

KCatch.pm�ł� CGI �X�N���v�g���s���̃G���[�����łȂ� HTTP�w�b�_���o�͂���O�ɔ��������G���[�ɂ‚��Ă��ߑ�����܂��B ���s�O�̃R���p�C�����̃G���[�iPerl���@�G���[�j��A use/require ���Ă��郂�W���[��/���C�u���������݂��Ȃ��ꍇ�Ȃǂ� Internal Server Error��������ł��܂��B CGI�J����Ǝ��ɂ́A���̃����b�g�͑傫���ł��B

KCatch.pm �̂����Ƃ��ȒP�Ȏg����

�����ł́A�����Ƃ��ȒP�� KCatch.pm �̓������@�������܂��B

�܂��A�_�E�����[�h�����A�[�J�C�u���� KCatch.pm �t�@�C�������o���A �E�F�u�T�[�o�� CGI �t�@�C���Ɠ����f�B���N�g���i�܂��� @INC �ȃf�B���N�g���j�� �A�b�v���[�h���Ă��������B
KCatch.pm �̃p�[�~�V������ rw-r--r-- (644) �Ƃ��܂��B

CGI �v���O�����̐擪 (#!/usr/bin/perl �̌ォ�Ause strict; �̌�) �ɁA

use KCatch;

�̂P�s��lj����邾���ł��B�ȏ�ŁA�����ł��B
�O�� Perl ���W���[���̌Ăяo���G���[��Adie�Ewarn �̃��b�Z�[�W�ȂǁA CGI ���s�������ɔ������鑽���̃G���[��ߑ��ł��܂��B

KCatch.pm �̂��K�؂Ȏg�����y�I�X�X���z

CGI �v���O�����{�̓��� Perl �̍\���G���[�Ȃǂ́A use KCatch �s�����s�����O�ɃG���[�I�����Ă��܂����߁A KCatch �ł͕ߑ��ł��܂���B
�����ŁA�ȉ��̎菇���g���΁A�قڑS�Ă� CGI �G���[�m���ɕߑ����邱�Ƃ��ł��܂��B

���ɁA�ȉ��̂悤�� CGI �v���O���� hello.cgi �� KCatch.pm �𓱓�����ꍇ�́A

#!/usr/bin/perl

use strict;
print "Content-Type: text/html\n\n";
print "Hello, World!!\n";
print scalar localtime(), "\n";

���� hello.cgi �̖{���͏����������ɁA �t�@�C������hello-main.pl�ƕύX���Ă��������B
hello-main.pl�̖����Ɉȉ���1�s��lj����܂��B(�I�}�W�i�C)

;1;

���ɁAhello.cgi�Ƃ����t�@�C������

#!/usr/bin/perl

use strict;
use KCatch;
require "hello-main.pl";

�����̓��e�ɂ��܂��B hello.cgi �̃p�[�~�V�����͒ʏ�ʂ� rwxr-xr-x (755) �Ƃ��܂��B
���ꂾ���̎菇�ŁAhello-main.pl���Ŕ��������G���[�͕ߑ�����A �u���E�U��ʂɃG���[���e���ԕ����ŕ\������܂��B

KCatch.pm �̎�ȃI�v�V����

KCatch.pm �́Ause �s�ɂĂ����‚��̃I�v�V�������w��ł��܂��B
��\�I�ȃI�v�V�������Љ�܂��B

source - �\�[�X�\���I�v�V����

use KCatch qw( source );

warn �� die �̔��������s�̃\�[�X�R�[�h���\�����܂��B
�J�����ɕ֗��ł����A��ʌ��J��ɉ��炩�̃G���[�����������ꍇ�A ��ʃ��[�U�ɂ��R�[�h�������Ă��܂����߁A �Z�L�����e�B��̖��ɐ�����”\��������܂��B
�f�o�b�O������E��ʌ��J�O�ɂ͂��̃I�v�V�����͊O���܂��傤�B

stderr - �G���[���e�� STDERR �ւ̒lj��o��

use KCatch qw( stderr );

�G���[���e���u���E�U��ʂ����łȂ��A �W���G���[�o�� STDERR �ɂ��f���o���܂��B
Apache �̃G���[���O�ɏ������܂�邽�߁A �G���[���e�̊m�F�ɕ֗��ł��B

Jcode=sjis - ���{��G���[���b�Z�[�W�̏o��

jcode=sjis �܂��� Jcode=sjis �I�v�V�����ł́A �G���[�����񒆂̓��{�ꕶ���R�[�h�� Shift_JIS �Ɏw��ł��܂��B �wCGI �̓��������R�[�h�� EUC-JP ������ǂ��A PC �p�ɏo�̓R�[�h�� Shift_JIS �ɂ��Ă���‹��x�ȂǂɗL�p�ł��B

use Jcode;
use KCatch qw( Jcode=sjis );

�̂悤�� Jcode=sjis �I�v�V�����𗘗p����ꍇ�́A �\�� Jcode.pm ���K�v�ł��B
(�����R�[�h�Ƃ���UTF8�����p�”\�ł�)

require "jcode.pl";
use KCatch qw( jcode=sjis );

�̂悤�� jcode=sjis �I�v�V�����𗘗p����ꍇ�́A �\�� jcode.pl ���K�v�ł��B
(�����R�[�h�Ƃ���UTF8�͗��p�ł��܂���)

execdata - ���܂萄������Ȃ��I�v�V����

���̑��ɁAexecdata �I�v�V�����i�ʖ��F�~����I�v�V�����j������܂����A ���� execdata �I�v�V�����𗘗p��������A ���̃y�[�W�ŏЉ�Ă��� hello.cgi�`hello-main.pl �̂悤�� �\�[�X�t�@�C���𕪗�����菇�̕������m���ɃG���[��⑫�ł��܂��B
���̂��߁A���݂� execdata �I�v�V�����̗��p�����A �\�[�X�����`���������߂��܂��B

�p�o�G���[���b�Z�[�W

Perl CGI �J�����̂��肪���ȃG���[���b�Z�[�W���Љ�܂��B

Global symbol "$xxxx" requires explicit package name 

use strict �‹����ł́A�S�Ă̕ϐ��� my �� local �� �g�p����O�ɐ錾����K�v������܂��B
���̃G���[���o��ꍇ�A�錾���Y��Ă���ϐ������邩�A �܂��́A�X�N���v�g���̕ϐ����̌뎚���l�����܂��B

Missing right bracket 

���̃G���[���o��ꍇ�A�J���J�b�R�g{�h���‚��Ă��܂���B
���[�v��������� if ���̓���q�\���ŁA �‚��Y�ꂽ�J�b�R�g}�h������悤�ł��B

unmatched () in regexp 

���K�\�����́g(�h���‚��Ă��܂���B
�g(�h�̐������g)�h��‚��Ă��邩�m�F������A s///; m//; �̗v�f���������������m�F���Ă��������B
�g(�h���̂̕����������������ꍇ�́A�g\(�h��g\Q(\E�h�ƃG�X�P�[�v���܂��B

Can't coerce array into hash 

���X�g�z��(ARRAY)�ւ̃��t�@�����X�� �n�b�V��(HASH)�Ƃ��ė��p���悤�Ƃ����ꍇ�ɔ������܂��B
$list->[0] �Ƃ��ׂ��ӏ��� $list->{0} �̂悤�ɋL�q���Ă����Ȃ��ł��傤���H

Can't call method "xxxx" without a package or object reference
Can't call method "xxxx" on an undefined value

���̃G���[���o��ꍇ�A ����`�l�␳�����N���X�Ɗ֘A�t�����Ă��Ȃ�(��bless)�ϐ��ɑ΂��� ���\�b�h�Ăяo�������s�����ꍇ�ɔ������܂��B
��̓I�ɂ́Anew() �R���X�g���N�^�̏����ŃG���[�����������̂ɁA �G���[����������ɑ����ă��\�b�h���Ăяo�����ꍇ�Ȃǂł��B

xxxx.pl did not return a true value

use/require ����鑤��Perl���W���[��/���C�u�����ł́A �Ō�̍s�͕K���^��Ԃ��K�v������܂��B ���̃G���[���b�Z�[�W���\�����ꂽ�ꍇ�́A �Y���t�@�C���̍Ō�̍s�ɃI�}�W�i�C��1�s

;1;

��lj������������B

�֘A���

KCatch.pm���Љ�Ă���Ă���y�[�W�F

�Ȃ��AKCatch.pm �Ǝ����@�\������ Perl ���W���[���Ƃ��āA CGI::Carp ������܂��B ������� CPAN ����C���X�g�[���ł��܂��B
�u���E�U�ւ̃G���[���e�\���� CGI::Carp �� fatalsToBrowser �I�v�V�������߂������ɂȂ�܂����A KCatch.pm �̕����ߑ��`�\�����m���ȋC�����܂��B
�t�ɁA�u���E�U�ւ̃G���[�\���ȊO�̋@�\�ɂ‚��Ă� CGI::Carp �̕������@�\�Ȗʂ�����܂��B

���̑��̃��W���[���E���C�u����

�R�����g�͂������ by AjaxCom

���̃y�[�W�ւ̃g���b�N�o�b�N by AjaxTB

�g���b�N�o�b�NURL�Fhttp://www.kawa.net/service/tb/ajaxtb.cgi/works/perl/catch/news.html

Kawa.netxp © Copyright 2000-2004 Yusuke Kawasaki