Shift-JIS�e�L�X�g�𐳂������� �ŋ߂̍X�V���� 2005-03-26: �u�ŏ��Ɂv���AXML���{��v���t�@�C����2�łɊ�Â��A��NjL�B 2005-03-09: �u�ŏ��Ɂv���A���͂���C���B 2003-06-24: Shift-JIS�̊������܂ރt�@�C����/�p�X�� 2003-05-31: �u�ŏ��Ɂv���A�u�V�t�gJIS�v�Ȃǂ̕\�L�ɂ��āB 2003-05-24: CP932�d����`�����̕ϊ� 2002-08-30: Perl 5.8.0 �ɂ��āB 2002-01-17: ����������ɑ��鐳�K�\������ 2001-12-15: ShiftJIS::Collate �� overrideCJK �p�����[�^��p�~�������Ƃɔ��� ���{�ꕶ�������ёւ���̏��������B �ŏ��� ���肪���ȃG���[ �G���[��ԈႢ��h���� �����e�����̍��� ���K�\���ƃ}�b�` �O���[�o���}�b�` �A���t�@�x�b�g�̑啶���Ə����� ����������ɑ��鐳�K�\������ �O���̕ϊ� CP932�d����`�����̕ϊ� �������𐔂��� �����P�ʂɕ������� ���낢��ȕ��� ����̒����Ő肻�낦�� ���{�ꕶ�������ёւ��� Shift-JIS�̊������܂ރt�@�C����/�p�X�� �ŏ��� ���{��̕����R�[�h�ɂ͂������̂��̂��g���Ă��܂��B������x��ʓI�Ȃ��̂Ȃ�A�ǂ���g���Ă��悢�ł��傤�i�ǂ̕����R�[�h�ŕ���������Ă��邩�̏����ꂳ�����Ȃ���j�B �Ⴆ�A���{���Windows�ł́A�������ł�DOS���ł�Shift-JIS���g���Ă��܂��B���������ꍇ�A�����̓r���ł킴�킴EUC-JP��UTF-8�ɕϊ�����Ƃ�����ʓ|�ł��B�f�o�b�O�̂Ƃ��A�u���̒i�K�ł͂��̕ϐ��ɂ͉��������Ă���̂��v�o�͂��ē_������̂͂悭�s���܂����A���̂Ƃ�EUC-JP�Ƃ��Ď��߂��Ă�����A��Ƃ͎�Ԃǂ�ł��傤�B���͂��o�͂�Shift-JIS�ōs������Ȃ�A�����̑S�̂�Shift-JIS�̂܂܈������炫���ƕ֗��ł��傤�B ���F "�V�t�gJIS", "Shift_JIS", "Shift-JIS" �Ȃǂ̕\�L�̈Ⴂ�ɂ��Ă͂悭�킩���Ă��܂���B���̂Ƃ��땪�����Ă��邱�Ƃ́F JIS X 0208:1997�̕�����1�i�V�t�g�������\���j�ɂ́A�u�Q�l�v�Ƃ��āu���̕������\���͒ʏ�g�V�t�gJIS�R�[�h�h�ƌĂ�Ă���v�̋L�q������܂��B IANA �� CHARACTER SETS �ɂ́AShift_JIS �� Windows-31J �Ƃ��ʂɓo�^����Ă��܂��B�܂��AShift_JIS�ɂ��āA�uCCS�i�����������W���j��JIS X0201:1997��JIS X0208:1997�ł���A���S�Ȓ�`��JIS X 0208:1997�̕�����1�Ɏ�����Ă���B�v�ƋL���Ă��܂��B W3C �� XML Japanese Profile �ɂ́AShift-JIS��Unicode�ւ̕ϊ��\����������|�̋L�ڂ�����܂��BXML Japanese Profile (Second Edition)�ł́AUnicode Consortium�Ō��J����Ă���Microsoft CP932�̕ϊ��\�ɂ��charset�̖��� "x-sjis-cp932" �� "Windows-31J" �ɕύX���Ă��܂��B Microsoft�Ђ� Global Dev �ł́ACodepage 932 �� "Japanese Shift-JIS" �ƒ��L���Ă��܂��B �������AShift-JIS�ɂ͂����̕Ȃ������āA������Ƃ������Ƃ��o�O��G���[�╶�������̌����ƂȂ�܂��B�Ȃ�Ƃ��Ȃ�Ȃ����̂ł��傤���B Perl�͐��䕶����i���������܂ރo�C�i���f�[�^�ł��琳���������ł���悤�ɐv����Ă���̂ŁA�X�N���v�g��e�L�X�g��Shift-JIS�ŏ��������炢�Ŗ��ɂȂ邱�Ƃ͂���܂���B �������Aperl���X�N���v�g�����߂���Ƃ��́i�ʏ�j�o�C�g�P�ʂŒ��ׂ�̂ŁAShift-JIS�̂悤�ȃ}���`�o�C�g�������܂ޕ����͂��̂܂܂ł͒��ڗ����ł��܂���B ���Ƃ��AShift-JIS�� '��' �Ƃ��������́A16�i����82 A0�Ƃ����Q�o�C�g�ŕ\����܂��B����� "\x82\xA0" �Ə����Ă�perl�ɂƂ��Ă͓����ł��B���ꂪ���{�́icountry�j���{��́ilanguage�j�����ł���Ƃ��AShift-JIS�ŏ�����Ă���icharset�j�Ƃ��������͂ǂ��ɂ��܂܂�Ă��܂���B ���̂��߁AShift-JIS�ŏ��������Ƃ��ɂ́Aperl�̌�����Ȃ��悤�ɏ����Ă��Ȃ���Ȃ�܂���B���̔z���́A�v���O���}�����Ă��Ȃ���Ȃ�܂���B���̕����̋L�q�́A���̂悤�Ȏ�Ԃ������Ă��AShift-JIS��p���邱�ƂɈӋ`������ƍl���Ă���l�ɂ͎Q�l�ɂȂ邩������܂���B ����Ȏ�Ԃ��|�������Ȃ��l�́A Perl 5.8.x�ȍ~���g���B ���_�Fperl5-porters@perl.org �ŃT�|�[�g����Ă���B ���_�F�Ɠ��̍l����������A�]���̓��{�ꏈ���Ƃ͑��e��Ȃ��Ƃ��낪����i�����Ƃ��A���̂�������ċC�ɂȂ�Ȃ��Ȃ邩������Ȃ��j�B jperl���g���B ���_�FShift-JIS ���Ƃ��Ē��ڈ������Ƃ��ł���B ���_�F���݁A�ێ�����l�����Ȃ��B �����R�[�h��UTF-8��EUC-JP�ɕϊ����Ă��珈������B ���_�FPerl 5.8.x�ȍ~�łȂ��Ă����삷��ϊ��p�̃��W���[��(.pm)��C�u����(.pl)�����낢�����\�B ���_�FShift-JIS�قLj����Ȃ��ɂ��Ă��A�}���`�o�C�g�������V���O���o�C�g�����Ƌ�ʂ����A�Ƃ��Ɉꕶ���Ƃ��ď�������͖̂ʓ|�ł���B �Ƃ����Ώ����Ƃ����ق����悢�ł��傤�B�����̃v���O�����͗L���Ȃ̂ŁA�T������������ł��傤����A�����͂����ɂ͎����܂���B �Ȃ��A���̕����ɏ�����Ă��鎖���A�ł����߂��Ȃ����@�Ȃ̂ŁA���������́A���̂���ł��ǂ݉������B���̕��@�ɂ��ĉ����^�₪�������Ƃ��Ă��A����ɂ��đ��̂Ƃ���Ŏ��₷��ƁA���ł���Ȃ��������Ă���̂��ƁA�����Ɣ����ł��傤�B���Ƃ����āA���ɂ��u���Ȃ��ʼn������B Shift-JIS���g�����Ƃ��ɂ��肪���ȁi�H�j�G���[ Shift-JIS�ɂ́A��Q�o�C�g�� [@-~]�iASCII 10�i����64-126�j�͈̔͂ɓ�����̂�����܂��B������ASCII�����́Aperl�ɂƂ��ē��ʂȈӖ��������Ƃ����邽�߁A�����G���[�̌����ƂȂ�܂��BShift-JIS�ł́A�Q�o�C�g�����̑�Q�o�C�g�́A[\x40-\x7E\x80-\xFC])�͈̔͂ɂ��邽�߁A����188����63�A��R���̂P�̕��������炩�̖����N��������Ƃ����܂��B ���ɁAShift-JIS���g�����Ƃ��ɋN���肪���ȃG���[�Ƃ��̌����������܂��B�G���[���b�Z�[�W��perl�̈Ⴂ�i�o�[�W������ǂ̃v���b�g�t�H�[���p�̂��̂ł��邩���j�ɂ�葽���̈Ⴂ�����邩������܂���B �G���[�ɂȂ�Ȃ��Ă��A��������������A���҂����悤�ȓ�������Ȃ�������ŁA���܂������Ȃ����Ƃ�����܂��B���̏ꍇ�A�G���[���o�Ȃ����A�����������ŒT���Ȃ���Ȃ�Ȃ��Ȃ邽�߃o�O���͂�������ł��B �����ł̓G���[�ɑ����͒��܂���B��͂��Ƃł܂Ƃ߂ď����܂��B �Ȃ��A�����ɂ͕����R�[�h��EUC-JP�ɂ��Ă��N����悤�Ȗ���G���[�͎����܂���B��{�I�ɁAEUC-JP�Ȃ�N���Ȃ����AShift-JIS�̂Ƃ��ɂ͋N����悤�Ȏ����Ɍ���܂��B �G���[�ɂ͂Ȃ�Ȃ����Ǖ�����������i�P�j �Ⴆ�A"�\��" �Ƃ� "�\��" �Ƃ��������e�����������������N�����܂��B������ "���" �Ƃ� "���" �ɂȂ�܂��B����́A"�\" �� "�\"�̕����̑�Q�o�C�g�� \ �ł��邽�߁A�_�u���N�I�[�g�����̒��ł͎��̕����̃G�X�P�[�v�����邱�ƂɂȂ�̂ŁA�\�� �� 0x955C8EA6 �ł����Ă��A�N�I�[�g�̌��ʂ� "�\��" �� 0x958EA6 �ƂȂ邩��ł��B'�\��' �Ƃ���Ε��������͋N����܂��A�V���O���N�I�[�g�ł��h���Ȃ�����������G���[������܂��i����j�B �G���[�ɂ͂Ȃ�Ȃ����Ǖ�����������i�Q�j �Ⴆ�A"�~�\\500" �Ƃ������e�����ł́A\ ���E�����Ă��܂��܂��B����́A'�~�\\500' �� q(�~�\\500) �ȂǂƂ��Ă��h�����Ƃ��ł��܂���B����� \\ �Ƃ����A��������� \ �P�ɂȂ��Ă��܂��Ƃ����K�������邩��ł��B �N�I�[�g��N�I�[�g�����Z�q�̒��ł́A������ɃN�I�[�g�Ɠ����������܂߂���悤�ɁA\ �ɂ��G�X�P�[�v��t����N�I�[�g�̏I�[�����ł͂Ȃ��A������̈ꕔ�Ƃ݂Ȃ��܂��B���̂��߁A\\ �� \ �̕�����\���G�X�P�[�v�ɂȂ�܂��B����̓N�I�[�g�̎n�[�E�I�[���������ɂ��Ă��������Ƃł��B �G���[�ɂ͂Ȃ�Ȃ����Ǖ�����������i�R�j �Ⴆ�A"�ۏ\net" �Ƃ������e�����������������N�����܂��B����� "�ۥ et" �̂悤�ɓr���ʼn��s����Ă��܂��܂��B����́A"�\" �̑�Q�o�C�g�� \ �ł��邽�߁A�_�u���N�I�[�g�����̒��ł͎��� 'n' �ƍ��킹��\n�̂��Ȃ킿���s������\�����^�����Ƃ��ĉ��߂���邩��ł��B �G���[�ɂ͂Ȃ�Ȃ����Ǖ�����������i�S�j �Ⴆ�A"�����@ARGV" �Ƃ������e�����������������N�����܂��B����́A"�@"�i�S�p�X�y�[�X�j�̑�Q�o�C�g�� @ �ł��邽�߁A�_�u���N�I�[�g�����̒��ł͎��� ARGV �ƍ��킹�� "@ARGV" �Ƃ����z��Ƃ��ĕϐ��W�J���s������ł��B@ARGV�̂悤�ɕK����`�����悤�Ȕz��Ȃ�A�W�J����܂����A�ʂ̏ꍇ�ł̓G���[�ɂȂ邩������܂���i����͎������Q�Ɓj�B In string, @dog now must be written as \@dog (Perl 5.6.0�܂�) �u������̒��ł́A@dog�͍���\@dog�Ə����Ȃ���Ȃ�Ȃ��v �O��ł݂��悤�ɁA�S�p�X�y�[�X "�@"�̑�Q�o�C�g�� @ �ł��邽�߁A���̕����ƍ��킹�Ĕz��ł��邩�̂悤�ɉ��߂��悤�Ƃ��܂��B"���@dog" �̂悤�ȏꍇ�A@dog �Ƃ����z��`����Ă�������p���ĕϐ��W�J���܂����A��`����Ă��Ȃ��ꍇ�A�G���[���b�Z�[�W���o���܂��B ``now must be written as''�u���͂��������Ȃ���Ȃ�Ȃ��v�Ƃ́APerl4�܂ł͔z��̕ϐ��W�J�͍s��Ȃ��������߁A"hoge@foo.bar" �̂悤�ȏ����������邱�Ƃ��ł����̂����A�� Perl�ł� @foo ���W�J����Ă��܂��̂ŁA���ӂ����N���邽�߃G���[���o���悤�ɂ��Ă���悤�ł��i����Perl���̂���z��̓W�J���T�|�[�g���Ă�����A�G���[���o�����ƂȂ��A�ق��ēW�J���邾����������������܂���B�������Q�Ɓj�B "���@\dog" �Ƃ�������Ƃ����ӌ�������܂����A\d �����^�����Ƃ��ē��ʈӖ����Ȃ����߂ɂ��܂������̂ł����āiPerl 5.6�ȍ~�ł́A�x�� Unrecognized escape \d passed through �u�F���ł��Ȃ��G�X�P�[�v \d ���n���ꂽ�v�������N�����܂��j�A�Ⴆ�� "�ԁ@\flower" �̂Ƃ��́A\f �����y�[�W�����Ƃ��ĉ��߂���A�����������܂��B Possible unintended interpolation of @dog in string (Perl 5.6.1�ȍ~) ������̒��ŁA@dog���\�������ɓW�J����� �O���Ɠ������A"���@dog" �ł����APerl 5.6.1�iActivePerl 626�j�ȍ~�ł́A��`����Ă��Ȃ��z��ł��ق��ēW�J���܂��B�z�� @dog ���W�J�����̂ŁA"��\x81" �Ɠ����ɂȂ�܂��B ����̓G���[�ł͂Ȃ��A�x���ɂȂ�܂��B Can't find string terminator '"' anywhere before EOF �u�I�[���� '"'���t�@�C���̏I�� EOF �܂łɌ�����Ȃ������v �Ⴆ�A"�Ή��\" �̂悤�ȃ��e�����ł́A'�\' �̑�Q�o�C�g�� \ �ł��邽�߁A������� " ���G�X�P�[�v���Ă��܂��܂��B���̂���perl�́A���� " �̓N�I�[�g������̏I�[�����Ƃ݂͂Ȃ����ɁA��������ɑ����ƍl���Ă��܂��܂��B����ȍ~�A�X�N���v�g�̒��� " �̕������S���܂܂�Ȃ���A���̂悤�ɃG���[�����܂��B qq{ "���{��" }�̂悤�ȏꍇ�ɂ����ӂ��Ȃ���Ȃ�܂���B"�{" �̑��o�C�g�� { �Ȃ̂ŁA���̂܂܂ł� { }�̃l�X�g������Ă��܂��A���l�̃G���[���������܂��B Bareword found where operator expected �u���̌ꂪ���Z�q�������Ăق����ʒu�Ɍ��������v �Ⴆ�Aprint "<img alt=\"�Ή��\\" height=115 width=150>"; �̂悤�ȏꍇ�A\" �ɂ����p���̃G�X�P�[�v�́A�\ �̑�Q�o�C�g��\�̂��߁A\\ " �Ƃ����g�ݍ��킹�ɂȂ�A�G�X�P�[�v���ł�������Ă��܂��B���̂��߁A���̃��e�����́Aperl���猩��ƁA"<img alt=\"�Ή��\\" �ŏI����Ă��܂��B���̂��߁A���e�����̌�ɁAheight �Ƃ����u���̌�v�i�N�I�[�g�ň͂܂�Ă��Ȃ�������j������悤�ɂ݂āA�����ɂ͗��̌�ł͂Ȃ��A���Z�q������ׂ��ł͂Ȃ����H��perl�͍l���܂��B Unrecognized character \x82 �u�F������Ȃ����� \x82�v ����́A��ASCII�����₻�̑��̕������u���̌�v�ɂ����Ƃ��ɏo�郁�b�Z�[�W�ł��B"�Ή��\" �̂悤�ȃ��e�����������āA���̂��Ƃ� "�Ȃ�ł���������" �̂悤�ȃ��e�������������Ƃ��A�O��Ɠ������R����N������̂ł��B �܂��Aq{�}�b�`} �̂悤�ȏꍇ�ɂ��A'�}' �̑��o�C�g�� } �Ȃ̂ŁA{ } �̃J�b�R�͂����ŏI����Ă��܂��A���l�ȃG���[�ɂȂ�܂��B �}�b�`���Ȃ��͂��Ȃ̂Ƀ}�b�`����i�P�j "���J��" =~ /�|�b�g/ �̓}�b�`���܂��B����́A'�|' �̑��o�C�g�� | �Ȃ̂ŁA/�|�b�g/ �� /\x83|�b�g/ �Ƃ݂Ȃ���A\x83 �����}�b�`����悢����ł��B �}�b�`���Ȃ��͂��Ȃ̂Ƀ}�b�`����i�Q�j "�Z��" =~ /Z/ �̓}�b�`���܂��B����́A'�Z' �̑��o�C�g�� 'Z' ������ł��B���o�C�g���A���t�@�x�b�g�ɂȂ镶���ɂ͒��ӂ��K�v�ł��B �}�b�`����͂��Ȃ̂Ƀ}�b�`���Ȃ��i�P�j "�^�]�Ƌ�" =~ /�^�]/ �̓}�b�`���܂���B����́A'�^' �̑��o�C�g�� '^'�Ȃ̂ŁA/�^�]/ �� /\x89^�]/ �Ƃ݂Ȃ���A������̎n�� ^ �̑O�� \x89 �͂Ȃ�����ł��B Search pattern not terminated �u�T�[�`�p�^�[�����I�����Ȃ��v ����́A/�\/ �̂悤�ɁA���o�C�g�� \ �ł��镶���ŃT�[�`�p�^�[�����I��点�悤�Ƃ����Ƃ��ɋN����܂��B�}�b�`���Z�q�̏I�[���� / ���G�X�P�[�v���Ă��܂��̂ŁA�T�[�`�p�^�[��������ɐ�ɑ����悤�ɉ��߂���܂��B���̐�ɂ�����x/�͂���܂����H �������Ƃ���ŁA�ʂ̃G���[����������ł��傤�B Substitution replacement not terminated �u�u������̒u�������I�����Ȃ��v �u�����Z�q�� s/PATTERN/REPLACEMENT/�̌`�����Ƃ�˂Ȃ�܂���B������ s/�\/��/; �̂悤�ɁA���o�C�g�� \ �ł��镶����PATTERN�������I��点�悤�Ƃ����Ƃ��ɂ��̃G���[���N����܂��B�}�b�`���Z�q�̏I�[���� / ���G�X�P�[�v���Ă��܂��̂ŁAPATTERN������ɐ�ɑ����悤�ɉ��߂���܂��B���̂���perl�́APATTERN�� �\/�� �̕����ł���ƍl���A�R�Ԗڂ�/�̐��REPLACEMENT����������ɈႢ�Ȃ��Ǝv���̂ł����A���̐�ɂ�����x/�͂���܂����H �������Ƃ���ŁA�ʂ̃G���[����������ł��傤�B unmatched [ ] in regexp �u���K�\���Ƀ}�b�`���Ȃ� [ ] ������v �Ⴆ�A/�v�[��/ �ł̓G���[���N����܂��B����� '�[' �̑��o�C�g�� [ �Ȃ̂ŁA/�v�[��/ �� /�v\x81[\x83\x8B/ �Ƃ݂Ȃ���Aperl�͕����N���X������̂ł͂Ȃ����Ǝv���܂��B�����������N���X�̏I�������� ] ��������Ȃ��̂ŃG���[�ɂȂ�܂��B �G���[�ɂ͂Ȃ�Ȃ����Ǖ�����������i�T�j �Ⴆ�Alc('�A�C�E�G�I')�́A'�a�c�e�g�i'��Ԃ��܂��BShift-JIS�̂Q�o�C�g�����̒��ɂ́A��Q�o�C�g��ASCII�ʼnp���ɓ�������̂�����܂��B�ڂ����̓A���t�@�x�b�g�̑啶���Ə������������������B �G���[��ԈႢ��h���� �ȏ�̂悤�ȃG���[��h���ɂ͂��܂��܂ȕ��@���l�����܂��B�Ⴆ�A"�\\��" �Ə��������ȂǂƂ�����Ă�����܂��B�������ł����܂��܂���B���������̂��߂ɂ͂ǂ̕����̌�� \ �������������m��K�v������܂��B����͕����R�[�h�\������Έꔭ�Ŗ��炩�ł��B �c�ȂǂƂ����ʓ|�Ȃ��Ƃ���ɂȂ�Ȃ��l�A�����R�[�h�\�Ȃi���Ȃ��Ƃ����ɂȂ�悤�ȕ������炢�́j�ËL���Ă��܂������Ƃ����悤�Ȑl�ɂƂ��ẮA�m���ɂ���ʼn����ɂȂ�Ǝv���܂��B�������A���̂悤�Ȑl�ɂ́A����ȃy�[�W�����ɂ���K�v���q�}���Ȃ��ł��傤�B �����ŁA���̂悤�ȃy�[�W���킴�킴���ɂ���悤�Ȑl�́A�����R�[�h�\�������������ׂ����Ȃ��ЂƂ��Ɖ��肵�܂��B�ʂɂ���������Ƃ����Ĕ���邱�Ƃ͂���܂���B�������A��Ԃ�ɂ��ނ��܂�Ԉ�����v���O�����C�ō���Ă��ẮA��ɃN���[���p�C���Ԃ����Ă��d������܂���B �����e�����̍��� �悭�m���Ă����˂Ȃ�Ȃ����Ƃ́A\ �Ƃ����G�X�P�[�v�p�̕����́A�ϐ��W�J��^�����̉��߂�肸���ƑO�̒i�K�ł��܂��܂ȉe�����y�ڂ��Ƃ������Ƃł��B���̂��߁A�ǂ�������f�[�^���m���ɕϐ��̒��Ɏ��߂��邩���l����K�v������܂��B�ϐ��̓����Ɏ��߂Ă��܂��APerl���f�[�^��K�ɊǗ����Ă���܂��B�悭�m���Ă��� $str = "�\��" �̕����������A�ϐ�$str�ɑ������ȑO�A�_�u���N�H�[�g�ň͂��_�ł��łɕ����������Ă���ƍl����ׂ��ł��B���łɕ������������f�[�^�������āA�D�����ʂ�������͂�������܂���B �q�A�h�L�������g�͈��S���̍��������@�ł��B�������A�I�[��������V���O���N�H�[�g�ň͂�ł��Ȃ��Ă͂Ȃ�܂���B�_�u���N�H�[�g�ň͂�A�N�H�[�g��t���Ȃ�������ł́A�\�����ʕϐ��W�J��^�����̉��߂�h�����Ƃ��ł��܂���B �V���O���N�H�[�g�ŏI�[��������͂q�A�h�L�������g�ł́A�ϐ��W�J��^�����̉��߂͉����N����܂���B�����A�I�[������i���̏ꍇ�� "\nEOF\n"�j��T�����Ƃ������s���܂��B�q�A�h�L�������g���g���ƕ�����ɉ��s���������܂����Achomp�ŏ����Ƃ����ł��傤�B ���̗�� $str = '�����Ƀe�L�X�g������' �Ɠ����悤�ɓ����܂����A������̓��e�ɂ���Ė�肪�N����܂���B�������Ƃ���Ƀ��e���������ł���Ɗ��҂ł��܂��B �T���v���R�[�h chomp($str = << 'EOF'); �����Ƀe�L�X�g������ EOF $src = << 'EOF'; $path = "C:\\path\\file"; open FH, $path; EOF �����̕��������x�ɍ�肽����Asplit�ŕ�������Ɨe�Ղɍ��܂��B �T���v���R�[�h ($name, $career, $age, $memo) = split "\n", << 'EOF'; �c����Y �v���O���} �O�\�� �啟���D���ł���B ���͂��܂�ۂ܂Ȃ��B EOF ���������Ȍ��ɏ���������A�����A\�i�Q�o�C�g�����Ɋ܂܂�Ă���͍̂\��Ȃ��j�A����уJ�b�R���܂܂Ȃ��Ƃ��������ŁAqw() ���g�����Ƃ��ł��܂��B�Ⴆ�A@str = qw(�\�� �Ή��\ );�̂悤�ɋ����ăJ�b�R�̃G�X�P�[�v��h���܂��B@str = qw(�\�� �Ή��\);�̂悤�ɋ����Ȃ��ƃG���[�̌��ł��B �P�̕��������鎞�ł��A���ӂ��ۃJ�b�R�ň͂�Ń��X�g�R���e�L�X�g���������A�E�ӂ��X���C�X�ɂ��邩���Ȃ���Ȃ�܂���B����́A�i����ł́jqw// �� split(' ', q//) �̗��L�Ƃ��Ď������Ă��邩��ł��B�Ȃ��APerl 5.6�ł̓��X�g�Ɠ����ɂȂ��Ă���悤�ł��B �T���v���R�[�h ($str) = qw(�S�O�\ ); $str = (qw/�S�O�\ /)[0]; $str = qw/�S�O�\ /; # Perl 5.6 ���K�\���ƃ}�b�` ���K�\���̃��^�����͑����̂ŁA���K�\���̒���Shift-JIS�̕�����߂��ނ͓̂���ł͂���܂���B�Ⴆ�A/\Q�Ή��\/ �ł̓G���[�ɂȂ�܂��B����́A/ / �͈̔͂̌��肪�^����ɍs���A���̎��_�ŃG���[����������̂ŁA\Q �̌��ʂ��y�ڂ����Ƃ��ł��Ȃ�����ł��B�܂��A/\Q�Ή��\\E/ �͍I���s���܂���B����́A�Ή��\\E �Ƃ�����������܂ނ��̂ɂ����}�b�`���܂���B����́A\\ �Ƃ����A�������邽�߁A\E ���F������Ȃ�����ł��傤�i���Ԃ�j�B ���̂��߁A�ϐ��ɓ���āA�}�b�`���Z�q��u�����Z�q�̒��œW�J������Ƃ�낵���ł��B���̂Ƃ����{�ꕶ����͗\��quotemeta ���ŏ������Ă����܂��B �T���v���R�[�h $pat = quotemeta +(qw/ �\ /)[0]; $str =~ /$pat\d+/; # �\1, �\2, ..�ȂǂɃ}�b�` # ������ $str = '��\\1' �ł��}�b�`����i���̖��͌�q�j ��̂悤�ȏ������͊m���ɏX���ł��ˁB�N�I�[�g�̒��� \Q \E ���g�����́A���������������Ă���ϐ��ƈꏏ�ɂȂ��肪�N����܂���B�������邱�ƂŁA\Q \E �͈̔͂����m�ɂȂ邩��ł��B������������̍����́A�O�q�̃��e�����̍�肩�����Q�l�ɂ��ĉ������B �T���v���R�[�h $pat = "(?:\Q$str1\E|\Q$str2\E)*"; $str =~ /$pat/; # ���͏�̕��͎��̕��Ɠ����B # $pat = "(?:" . quotemeta($str1) . "|" . quotemeta($str2) . ")*"; ���e�������N�H�[�g�̒��ɒ��ږ��߂��ނƂ��܂��s���Ȃ����Ƃ�����܂��B����́Aperl�� \E �Ƃ������^���������悤�Ƃ����̂��AShift-JIS�������W���邽�߂ł��B "\Q�\\E"�ł́A�\E�Ƀ}�b�`���鐳�K�\���ɂȂ�܂��B�\�̑��o�C�g�� \ �Ǝ��� \�����킳��̂ŁAperl�ɂ�\Q \x95 \\ E�̑g�ݍ��킹�ł���悤�Ɏv���܂��B \Q�̍�p�̌��ʂ�\\x95\\x5cE�ɂȂ�܂��B���̂��߁A�\E�Ƀ}�b�`���܂��B "\Q�\"�͂ǂ��ł��傤�B���̏ꍇ�́A" " �͈̔͂����߂�Ƃ��ɁA�\�̑��o�C�g����̃N�H�[�g���G�X�P�[�v���Ă��܂��̂ŁA������͈̔͂����҂����悤�ɂ͒�܂炸�A�G���[�ɂȂ�܂��B���̃G���[��\Q�̌��ʂ��l������O�ɔ�������̂ŁA�h���悤������܂���B "\Q�\\\E"�͂ǂ��ł��傤�B�m����Shift-JIS�ł͖�肠��܂���B�����������X�N���v�g��EUC-JP��UTF-8�ɕϊ������Ƃ��ɂ͖�肪����܂��B�\\E�Ɨ]���ȂQ���������镶����łȂ��ƃ}�b�`���܂���B�ǂ���ɂ���A\���ǂ��ɓY���邩���l����K�v������̂ŁA�����̎�|�ɍ����܂���B ���K�\���͗Ⴆ�A���̂悤�ɂ��܂��B��������Shift-JIS�݂̂ɗL���ł��B $digit = '(?:[0-9]|\x82[\x4F-\x58])'; # �����i���p�ƑS�p�j $upper = '(?:[A-Z]|\x82[\x60-\x79])'; # �A���t�@�x�b�g�啶���i���p�ƑS�p�j $lower = '(?:[a-z]|\x82[\x81-\x9A])'; # �A���t�@�x�b�g�������i���p�ƑS�p�j $space = '(?:[\ \n\r\t\f]|\x81\x40)'; # �����i���p�ƑS�p�j $ascii = '[\x00-\x7F]'; # ASCII���� # �S�p�������i���_�E�����_�E�x�莚���܂ށj $hiraZ = '(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])'; # �S�p�Љ����i�������E���_�E�����_�E�x�莚���܂ށj $kataZ = '(?:\x83[\x40-\x7E\x80-\x96]|\x81[\x5B\x4A\x4B\x52\x53])'; # ���p�Љ����i���p�������E��Ǔ_���܂ށj $kataH = '[\xA1-\xDF]'; $onebyte = '[\x00-\x7F\xA1-\xDF]'; $twobyte = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; # JIS���� $all_JIS = '(?:[\x00-\x7f\xa1-\xdf]|'. . '\x81[\x40-\x7e\x80-\xac\xb8-\xbf\xc8-\xce\xda-\xe8\xf0-\xf7\xfc]|' . '\x82[\x4f-\x58\x60-\x79\x81-\x9a\x9f-\xf1]|' . '\x83[\x40-\x7e\x80-\x96\x9f-\xb6\xbf-\xd6]|' . '\x84[\x40-\x60\x70-\x7e\x80-\x91\x9f-\xbe]|' . '\x88[\x9f-\xfc]|\x98[\x40-\x72\x9f-\xfc]|\xea[\x40-\x7e\x80-\xa4]|' . '[\x89-\x97\x99-\x9f\xe0-\xe9][\x40-\x7e\x80-\xfc])'; # �x���_��`���� # NEC���ꕶ�� $NEC_special = '(?:\x87[\x40-\x5d\x5f-\x75\x7e\x80-\x9c])'; # NEC�I��IBM�g������ $NEC_IBM_ext = '(?:\xed[\x40-\x7e\x80-\xfc]|\xee[\x40-\x7e\x80-\xec\xef-\xfc])'; # IBM�g������ $IBM_ext = '(?:[\xfa-\xfb][\x40-\x7e\x80-\xfc]|\xfc[\x40-\x4b])'; Shift-JIS�Ń}�b�`���s�����ɂ́A�Q�̖�肪����܂��B ���o�C�g��ASCII�̗̈�ɓ��镶��������̂ŁAASCII���܂ރp�^�[���Ƀ}�b�`����\��������B ���镶���̑��o�C�g�Ǝ��̕����̑��o�C�g���P�����ł��邩�̂悤�Ƀ}�b�`���Ă��܂��B ��҂�EUC-JP�ł��N���肤����ł��iUTF-8�Ȃ�N����Ȃ����A���͂��ꂪ���Ȃ̂ł͂Ȃ��j�B�������O�҂�EUC-JP�ł͋N����Ȃ����AShift-JIS�ł͋N���肤����ł��B������h�����@�́A���Ǔ������Ƃł����A���K�\���̒��ɁA��ɐ擪���܂܂��邱�Ƃł��B �T���v���R�[�h # �擪����}�b�` $str =~ /^$char*?(?:$pat)/; ��������̃}�b�`�ł͂��܂��s���Ȃ����Ƃ�����܂��B"�E" =~ /E$/���l����Ώ\���ł��傤�B�܂��A"\x8E" x 30 . "E"��$str = "������������������������������E"�ł��邪�A"\x8E" x 31 . "E"��$str = "�������������������������������E"�ł���܂�����AShift-JIS���������납��蕪����K�ȕ��@�͂Ȃ��ƍl�����܂��B ���Ȃ��Ƃ��A�Q�o�C�g�������\�����Ȃ��o�C�g [\x00-\x3F\x7F] �������鏊�܂ŁA�ɒ[�ȏꍇ�͕�����̍ŏ��܂ŃX�L�������Ȃ��Ƃ킩�炸�A��������ǂ� lookbehind �̐��K�\�� (?<=PATTERN)�͍��̏��A�s�蒷�ɂł��܂���i(?<=(?:\A|[\x00-\x3F\x7F])$char*) �Ƃ͂ł��Ȃ��j�̂ŁA�擪���當���P�ʂł炵�Ă��珈������̂��A���ǂ͊ȕւȂ̂�������܂���B �O���[�o���}�b�` �O���[�o���}�b�` /g �̏ꍇ�́A\G���g���܂��傤�B\G�͑O��}�b�`���������̖������w���܂��B ���̗�ł́A�u������Ȃ��̂��]�܂����̂ł����A\G���Ȃ��̂ŁA�擪����J�n���ĕ�����S�̂܂ʼn��тă}�b�`���Ȃ��������ƁA���߂Đ擪����P�o�C�g�i�ʒu����X�L�������ĊJ����̂ŁA���ꂽ�ʒu�Ȃ̂Ƀ}�b�`�����ƍl���Ă��܂��܂��B\G���g��Ȃ��ƁA�Ԉ�����ʒu�Ƀ}�b�`���邩������Ȃ������ɁA�]�v�ȍČ���������̂ŁA���Ԃ�������܂��B �T���v���R�[�h $str = '��������E��������E'; $pat = '�E'; $str =~ s/\G($char*?)($pat)/${1}E/og; # '��������E��������E' �̂܂܁i�������j�B \G��t���Ȃ��ꍇ $str = '��������E��������E'; $pat = '�E'; $str =~ s/($char*?)($pat)/${1}E/og; # '�E' ������� 'E' �ɒu�� print $str; # '�������E�������E' �ɂȂ��Ă��܂��i���������j�B �@�@�@�@��������E��������E �P��ځ@��������/��������/ �i�}�b�`���Ȃ��j �Q��ځ@|��������||||||||| �i�}�b�`�����̂Œu���j �R��ځ@|||||||||��������/ �i�}�b�`���Ȃ��j �S��ځ@||||||||||�������� �i�}�b�`�����̂Œu���j �@�}��F ���@$char���Q�o�C�g�����Ƀ}�b�` �@�@�@�@�@/�@$char���P�o�C�g�����Ƀ}�b�` �@�@�@�@ �ˁ@$pat���}�b�` �@�@�@�@�@|�@�X�L�����͈̔͊O �������A�p�^�[�����[���������Ƀ}�b�`����ꍇ�ɂ́A���ӂ��K�v�ł��B���̗�́A�u�A�v�̑O�� 'Z' ��������̂ł��B��P��͕����̂���i'�A' : 0x8341�ɑ���'��A' : 0x8B8341������ă}�b�`����j��h���ł��܂���B��Q��́A��̕��@�Łu����v��h�����Ƃ����̂ł����AZ �ւ̒u�����A�����ċN�����Ă��܂��B ����͑�R��̂悤�ɂ���K�v������܂��B����́A��Q��ł́u�Ȃ��H�v�ɏ������悤�ɁA�u������邩��ƍl�����܂��B �T���v���R�[�h $str = "�A�C�E�G�A�A�C�E�A��A"; print +($temp = $str) =~ s/(?=�A)/Z/g, $temp; print +($temp = $str) =~ s/\G($char*?)(?=�A)/${1}Z/g, $temp; print +($temp = $str) =~ s/\G(\A|$char+?)(?=�A)/${1}Z/g, $temp; ���� 5 Z�A�C�E�GZ�AZ�A�C�EZ�A�Z�A 7 Z�A�C�E�GZZ�AZZ�A�C�EZZ�A��A 4 Z�A�C�E�GZ�AZ�A�C�EZ�A��A �Ȃ��H �A �C �E �G �A �A �C �E �A �� A 1 \G Z 2 \G$char$char$char$char Z 3 \G Z 4 \G$char Z 5 �ȉ��A�ȗ� �܂�A�O���[�o���}�b�`�ł́A�}�b�`���[���������łȂ��p�^�[���̑O�ɂ�\G($char*?)���A�[���������ł���p�^�[���̑O�ɂ�\G(\A|$char+?)������K�v������܂��B �������A����ł��������i�H�j�}�b�`�������Ȃ��ꍇ������܂��B �T���v���R�[�h $str = "0123000123"; print +($temp = $str) =~ s/0*/Z/g, $temp; print +($temp = $str) =~ s/\G($char*?)0*/${1}Z/g, $temp; print +($temp = $str) =~ s/\G(\A|$char+?)0*/${1}Z/g, $temp; __END__ 9 ZZ1Z2Z3ZZ1Z2Z3Z 14 ZZ1ZZ2ZZ3ZZ1ZZ2ZZ3ZZ 7 Z1Z2Z3Z1Z2Z3Z ����́A�p�^�[�����[���������Ƀ}�b�`������̂ł���ƁA/g�����̏�Ŗ����ɑ����݂��ďI�����Ȃ��Ȃ�̂�h�����߁Aperl�́A�}�b�`�������I�ɐi�߂Ă���̂ł����icf. perlre, Repeated patterns matching zero-length substring�j�A���̐i�ߕ��̐^���i�������o�C�g�P�ʂł͂Ȃ��A�����P�ʂŐi�ނ��́j���A\G($char*?)��\G(\A|$char+?)�ł́A���܂��ł��Ȃ�����ł��B�����Ƃ����������}�b�`�����邱�Ƃ́A�قƂ�ǂȂ��ƍl�����܂��̂ŁA�C�ɂ���K�v�͂Ȃ��̂����m��܂���i�������ɂ��݁j�B �A���t�@�x�b�g�̑啶���Ə����� Shift-JIS�̂Q�o�C�g�����̒��ɂ́A��Q�o�C�g��ASCII�ʼnp���ɓ�������̂�����܂��B���̂��߁A�� uc, lc ��A���^���� \U, \L���Q�o�C�g�����̈ꕔ��ϊ����Ă��܂�����i�������� ucfirst, lcfirst �� ���^���� \u, \l �͖��ƂȂ�Ȃ��j�Am//i �� s///i�Ȃǂ� /i�C���q�ɂ���ĈႤ�����Ȃ̂Ƀ}�b�`���Ă��܂����肷�邱�Ƃ�����܂��B Shift-JIS������Ɋ܂܂��ASCII�̉p����啶���܂��͏������ɑ��������Ȃ�A�Ⴆ�A���̂悤�ȃT�u���[�`�������Ύ����ł��܂��B �T���v���R�[�h $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; lc("PERL�v���O���~���O"); # 'perl�v���o���~���o' tolower("PERL�v���O���~���O"); # 'perl�v���O���~���O' sub tolower { my $str = $_[0]; $str =~ s/\G($char*?)([A-Z]+)/$1\L$2/g; $str; } sub toupper { my $str = $_[0]; $str =~ s/\G($char*?)([a-z]+)/$1\U$2/g; $str; } �P�[�X�����̃}�b�` /i �̏ꍇ�́A�Ⴆ�� '�G'�̑��o�C�g�� 'G' �ł���A'�g'�̑��o�C�g�� 'g' �ł��邱�Ƃ���A'�G' =~ /�g/i�̓}�b�`���܂��B�ł�����AShift-JIS�Ő��m�ȃ}�b�`����������A/i�C���q�͎g�����Ƃ��ł��܂���B �����ɁA������Ɋ܂܂��A���t�@�x�b�g�i��o�C�g�����̑�Q�o�C�g�ɂ�����̂������j���������i�܂��͑啶���A�ǂ��炩�j�ɓ��ꂵ�ă}�b�`�����܂��Btolower�̒�`�͏�������������B �T���v���R�[�h $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $lcstr = tolower($str); $lckey = tolower(quotemeta $key); if ($lcstr =~ /^$char*?$lckey/) { print "matched"; } else { print "not matched"; } �܂��͖��ߍ��ݏC���q (?ismx-ismx) ��p���Ă��D�����ʂ��܂��B �T���v���R�[�h "��P��Perl�u�k�̂��ē�" =~ /^$char*?PERL�u�K/i # �}�b�`����i����j "��Q��Perl�u�k�̂��ē�" =~ /^$char*?((?i)PERL)�u�K/ # �}�b�`���Ȃ��i�ǂ��j "��R��Perl�u�K�̂��ē�" =~ /^$char*?((?i)PERL)�u�K/ # �}�b�`����i�ǂ��j �S�p�Q�o�C�g�A���t�@�x�b�g�̃P�[�X�����́A�I���ɂ������ł��܂��i���A����ς�ρj�B'�`'�̑�Q�o�C�g�� '`' �Ȃ̂��A������ƒ��ӂł��im`` �Ȃǂ̂Ƃ��v���I�G���[�ɂȂ�B�������o�b�N�N�H�[�g���g���Ӗ��͓��ɂȂ��j�B�����I�ɂ̓��e�������}�b�`���Z�q��u�����Z�q�ɒ��ږ��ߍ��ނ͔̂����������ł��B �T���v���R�[�h /(?:�o|��)(?:�d|��)(?:�q|��)(?:�k|��)/; ���̑���ɂ���ȃT�u���[�`��������Ă݂Ă��悢��������܂���B �T���v���R�[�h $CharRE = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $pat = make_regexp_ignorecase("�o�d�q�k�u�K"); print "��T��o�������u�K��" =~ /^$char*?$pat/ ? "OK": "NOT"; sub make_regexp_ignorecase { my $str = $_[0]; $str =~ s/\G([A-Za-z]+|$CharRE)/ my $c = ord $1; if($c == 0x82) { my $v = vec($1,1,8); 0x81 <= $v && $v <= 0x9A ? sprintf('\\x82[\\x%2x\\x%2x]', $v, $v-33) : 0x60 <= $v && $v <= 0x79 ? sprintf('\\x82[\\x%2x\\x%2x]', $v, $v+33) : quotemeta($1); } elsif(0x41 <= $c && $c <= 0x5A || 0x61 <= $c && $c <= 0x7A) {"(?:(?i)$1)"} else {quotemeta($1)} /geo; $str; } ����������ɑ��鐳�K�\������ ���K�\���́APerl �ɂƂ��Č������Ȃ����݂Ƃ����܂��B���������K�\���̐����Ƃ��āA*, +, {min,max} �Ȃǂ̗ʎw��q���}�b�`���J��Ԃ���̏���Ƃ�����肪����܂��B(�ڍׂ� perlre �Q�Ƃ̂���)�B���̂��߁A$char*? �Ƃ������K�\���ɂ́A�댯��������܂��B �Ⴆ�A���̂悤�ȃ}�b�`���O���l���Č��܂��傤�B$str�́A�u���v��10�����A���������ƂɁA�u�A�CABC�v���A�����ꂽ������ł��B���̂悤�ȕ�����i�������A�u�w���x��10�����A���v�Ƃ������Ƃ͕����炸�A�C�ӂ� Shift-JIS �e�L�X�g�ł��낤�Ƃ������Ƃɂ��܂��j����A���p�A���t�@�x�b�g���A���������������������Ƃ��܂��傤�B����ƁA���܂ł̍l�������炷��ƁA���̂悤�ɂ���悢�Ǝv���܂��B �T���v���R�[�h my $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; my $str = ('��' x 100000) . '�A�CABC'; $str =~ /^$char*?([A-Z]+)/o; print $1; �������A����́A���ɂ���ẮA�傫�ȃG���[�������N�����܂��B�Ⴆ�AWindows 98��� Active Perl 522 ��p�����ꍇ�AError: Runtime exception �Ƃ��� Perl �̃G���[�ɂȂ�܂����B�܂��AWindows 98���VC++ 6.0�ŃR���p�C�����ꂽ Perl 5.6.1 ���ƁA�u���̃v���O�����͕s���ȏ������s�����̂ŋ����I������܂��B�`�v�ȂǂƂ������G���[�ɂȂ�܂����B ���̂悤�Ȗ����ł��邾���h�����߂ɂ́A���̂悤�ɂ��܂��B�܂�A������̐擪���璲�ׂĂ����ꍇ�A��o�C�g�����̕������E���ԈႦ��̂́A��o�C�g�����̑��o�C�g�̒�������E�ƌ�F�������������ł��BShift-JIS�ł́A��o�C�g�����̑��o�C�g�́A[\x81-\x9F\xE0-\xFC] �����ł��B���邢�́AEUC-JP �ɕϊ��\�ȗ̈悾�����l������A[\x81-\x9F\xE0-\xEF] �����Ƃ������Ƃ��ł��܂��B����ȊO�̃o�C�g�̒���́A�Ⴆ�A0x41 �̒���́A'A' �̒��ォ�A'�A' �̒��ォ�͕�����܂��A�m���ɕ������E�ɂȂ�܂��B�]���āA[\x81-\x9F\xE0-\xFC]+ �i�܂��� [\x81-\x9F\xE0-\xEF]+ �j�̃o�C�g�i��o�C�g�����j���A������Ƃ��낾���ɒ��ӂ���悢���ƂɂȂ�܂��B ���̂��߁A�ȉ��̂悤�ɁA^$char*? �̑���� $Apad ���g���A\G$char*? �̑���� $Gpad ��p����A��o�C�g�������A��o�C�g�����̂������o�C�g�� [\x40-\x7E\x80\xA0-\xDF] �ŏI�����̂��A���Ȃ��Ƃ��K���ȊԊu�Łi����ɒB���Ȃ������Ɂj�o������A�G���[�ɂȂ炸�ɏ������邱�Ƃ��ł��܂��B�i�m���I�Ȗ��ł��̂ŁA���S�ł͂���܂���B�j �T���v���R�[�h # ����}�b�` my $Apad = '(?:(?:\A|[\x00-\x80\xA0-\xDF])(?:[\x81-\x9F\xE0-\xFC]{2})*?)'; my $str1 = ('��' x 100000) . '�A�CABC'; $str1 =~ /$Apad([A-Z]+)/o; print "$1\n"; # "ABC" �ƕ\�������B # �O���[�o���}�b�` my $Gpad = '(?:(?:\G|[\x00-\x80\xA0-\xDF])(?:[\x81-\x9F\xE0-\xFC]{2})*?)'; my $str2 = '��' x 100000 . '�A�CABC'. '��' x 100000 . 'XYZ'; my @array = $str2 =~ /$Gpad([A-Z]+)/go; print "@array\n"; # "ABC XYZ" �ƕ\�������B �O���̕ϊ� �x���_��`������[�U��`�������܂ޕ�����𑼂̊��ł����p�ł���悤�ɂ���ɂ́A�K�ȕϊ����K�v�ł��i���_�A�܂������������̗̂��p�͂قƂ�ǖ]�߂��A�����炭�͗ގ����������╶����ɕϊ����邱�ƂɂȂ�ł��傤�j�B�����Perl�ł͒u�����Z�q s/// ���g���Δ�r�I�e�ՂɎ����ł��܂��B ���炩���߁A�ǂ̊O�����ǂ��ϊ����邩���`����ϊ��e�[�u����p�ӂ��Ȃ��Ă͂Ȃ�܂���B�����Perl�ł̓n�b�V���ɂ��Ă����Ƃ��̌�̏������y�ɂȂ�܂��B�����ł́A'w932_gai.txt'�Œ�`����AWindows codepage-932�R�[�h�Ɋ�Â����@��ˑ������́i�����I�j�ϊ��e�[�u�����g�����Ƃɂ��܂��B ���̃R�[�h�ł́A�P�����Â}�b�`�����A���̕������ϊ��n�b�V���̃L�[�ɂ���ΑΉ�����l�̕�����ɒu�����A�����łȂ�����̂܂c���܂��B �T���v���R�[�h require 'w932_gai.txt'; # %table�̒�`�i�s���S�I�j $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $str =~ s/($char)/exists $table{$1} ? $table{$1} : $1/geo; ���l�ȏ����́A���̂悤�ȏ������ł��ł��܂����A�O���Ƀ}�b�`���鐳�K�\�� $gaiji��p�ӂ���K�v������܂��B���ꂽ�}�b�`�����Ȃ����߂ɁA������̐��K�\���ɂ� \G ���K�v�ł��B�Ⴆ�A$str = '��@';�̌��Q�o�C�g�� "\x87\x40" �ł����A��������}�b�`�������S�z������܂���B�܂��A��~����}�b�` ($char*?)���g���� $char ���O���Ƀ}�b�`���Ȃ��悤�ύX����K�v�͂���܂���B �T���v���R�[�h require 'w932_gai.txt'; # %table�̒�`�i�s���S�I�j $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $gaiji = '(?:[\x87][\x40-\x9c])'; $str =~ s/\G($char*?)($gaiji)/$1$table{$2}/g; CP932�d����`�����̕ϊ� Microsoft Windows ���{��łň�ʓI�Ɏg�p����Ă���R�[�h�y�[�W 932 (CP932) �ł́A����̕������d�����Ē�`���ꂽ��ԂɂȂ��Ă��܂��B�����ŁA�������d����`����Ă���Ƃ́AUnicode�̓��������ʒu�ɑΉ��t�����Ă��邱�ƂƂ��܂��B �Ⴆ�ACP932 -> Unicode -> CP932 �̏��ŕϊ������ƁA�d����`�����́A�ǂꂩ��ɑ������܂��B���̗D�揇�ʂ� JIS X 0208, NEC���ꕶ�� (13��)�AIBM�g������ (115�`119��)�ANEC�I��IBM�g������ (89�`92��) �̏��ł��B���Ƃ��āA'��' �̏ꍇ�ANEC���ꕶ���� "\x87\x9A" �� IBM�g�������� "\xFA\x5B" �́AJIS X 0208 �� "\x81\xE6" �ɂȂ�܂��B �������ACP-932 �̃e�L�X�g���A�d����`�������ǂꂩ�ɑ����Ă��Ȃ����Ƃ�����܂��B�Ⴆ�� "\x87\x9A" �� "\xFA\x5B" ���܂܂�Ă���ƁA�e�L�X�g��ڂŌ���ƈႢ���Ȃ��̂ɁA"\x81\xE6" �Ō������Ă��������Ȃ����ƂɂȂ�܂��B �d����`�����𑵂��郂�W���[���Ƃ��āAShiftJIS/CP932/Correct.pm ������܂��B����Ǝg������Perl�̃y�[�W�ɖ߂�Ό�����܂��B �܂��AShiftJIS/String.pm �� strtr() �܂��� trclosure() ���g�����@������܂��B����Ǝg������Perl�̃y�[�W�ɖ߂�Ό�����܂��B �T���v���R�[�h # (1) $necJIS -> $jisNEC (9��) $necJIS = "\x87\x90\x87\x91\x87\x92\x87\x95\x87\x96\x87\x97\x87\x9A\x87\x9B\x87\x9C"; # NEC���ꕶ���̂����AJIS�����ɕϊ������ׂ��� $jisNEC = "\x81\xE0\x81\xDF\x81\xE7\x81\xE3\x81\xDB\x81\xDA\x81\xE6\x81\xBF\x81\xBE"; # JIS�����̂����ANEC���ꕶ���ɏd����`����Ă���� # (2) $necibmJIS -> $jisNECIBM (1��) $necibmJIS = "\xEE\xF9"; # NEC�I��IBM�g�������̂����AJIS�����ɕϊ������ׂ��� $jisNECIBM = "\x81\xCA"; # JIS�����̂����ANEC�I��IBM�g�������ɏd����`����Ă���� # (3) $ibmJIS -> $jisIBM (2��) $ibmJIS = "\xFA\x54\xFA\x5B"; # IBM�g�������̂����AJIS�����ɕϊ������ׂ��� $jisIBM = "\x81\xCA\x81\xE6"; # JIS�����̂����AIBM�g�������ɏd����`����Ă���� # (4) $ibmNEC -> $necIBM (13��) $ibmNEC = "\xFA\x4A-\xFA\x53\xFA\x58\xFA\x59\xFA\x5A"; # IBM�g�������̂����ANEC���ꕶ���ɕϊ������ׂ��� $necIBM = "\x87\x54-\x87\x5D\x87\x8A\x87\x82\x87\x84"; # NEC���ꕶ���̂����AIBM�g�������ɏd����`����Ă���� # (5) $necibmIBM -> $ibmNECIBM (13��) $necibmIBM = "\xEE\xEF-\xEE\xF8\xEE\xFA\xEE\xFB\xEE\xFC"; # NEC�I��IBM�g�������̂����AIBM�g�������ɕϊ������ׂ��� $ibmNECIBM = "\xFA\x40-\xFA\x49\xFA\x55\xFA\x56\xFA\x57"; # IBM�g�������̂����ANEC�I��IBM�g�������ɏd����`����Ă���� # (6) $necibmCJK -> $ibmCJK (360��) $necibmCJK = "\xED\x40-\xEE\xEC"; # NEC�I��IBM�g���������̊��� $ibmCJK = "\xFA\x5C-\xFC\x4B"; # IBM�g���������̊��� use ShiftJIS::String qw(trclosure); # �ϊ��p�N���[�W���̐��� $correctCP932 = trclosure( $necJIS.$necibmJIS.$ibmJIS.$ibmNEC.$necibmIBM.$necibmCJK, # from $jisNEC.$jisNECIBM.$jisIBM.$necIBM.$ibmNECIBM.$ibmCJK # to ); $result = $correctCP932->($source); # $source ��ϊ����� $result �� �������𐔂��� Shift-JIS������̕������𐔂���ɂ́A�}�b�`���Z�q�𗘗p����Ȃ�X�J���[�R���e�L�X�g�Ő�������������������ł��B������A�u�����Z�q�𗘗p�����ق�������������Ƃ킩��܂����B �����Ƃ�XS�ŏ������ق��������Ƒ��������ł��B�܂��AXSUB�͖����ɗ��p���Ȃ��Ă��悢�ł��傤�B �T���v���R�[�h use Benchmark; $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $s = "������\0A�C�e�X�g -"; timethese (100000, { le => q{ ($str = $s) =~ s/$char/0/go; $le = length $str; }, sg => q{ $sg = ($str = $s) =~ s/$char//go; }, ab => q{ $ab = 0; $ab++ while $s =~ /[^\x81-\x9F\xE0-\xFC]|../g; }, ar => q{ $ar = @{[ $s =~ /$char/go ]}; }, gr => q{ $gr = grep defined, $s =~ /$char/go; }, wh => q{ $wh = 0; $wh++ while $s =~ /$char/go; }, sj => q{ $sj = sjslen($s); }, xs => q{ $xs = sjlength($s); }, }); sub sjslen { my($str,$len,$i,$c,$blen); $str = shift; $blen = length $str; while ($i < $blen) { $c = vec($str, $i, 8); if (0x81 <= $c && $c <= 0x9F || 0xE0 <= $c && $c <= 0xFC){ $i++ } $i++,$len++; } $len; } ���� Benchmark: timing 100000 iterations of ab, ar, gr, le, sg, sj, wh, xs... ab: 4 wallclock secs ( 3.46 usr + 0.00 sys = 3.46 CPU) @ 28901.73/s ar: 6 wallclock secs ( 5.98 usr + 0.00 sys = 5.98 CPU) @ 16722.41/s gr: 6 wallclock secs ( 5.50 usr + 0.00 sys = 5.50 CPU) @ 18181.82/s le: 3 wallclock secs ( 2.09 usr + 0.00 sys = 2.09 CPU) @ 47846.89/s sg: 2 wallclock secs ( 1.92 usr + 0.00 sys = 1.92 CPU) @ 52083.33/s sj: 9 wallclock secs ( 8.57 usr + 0.00 sys = 8.57 CPU) @ 11668.61/s wh: 5 wallclock secs ( 4.78 usr + 0.00 sys = 4.78 CPU) @ 20920.50/s xs: 1 wallclock secs ( 0.38 usr + 0.00 sys = 0.38 CPU) @ 263157.89/s (warning: too few iterations for a reliable count) XSUB int sjlength(arg) SV* arg PROTOTYPE: $ PREINIT: unsigned char *str, *p, *e; STRLEN byte, len = 0; CODE: p = str = (unsigned char *)SvPV(arg, byte); e = str + byte; while (p < e) { if (0x81 <= *p && *p <= 0x9F || 0xE0 <= *p && *p <= 0xFC) ++p; ++p, ++len; } RETVAL = len; OUTPUT: RETVAL �����P�ʂɕ����� Shift-JIS��������P�ʂɕ������܂��傤�B���̏ꍇ�́AXS�𗘗p���Ă����܂葬���Ȃ�܂���ł����B�Ԃ�l�̃��X�g��p�ӂ���̂Ɏ��Ԃ������̂��A��͂�Perl�̐��K�\���̏����͂��Ȃ葬�����̂��Ƃ������Ƃł��傤�B �T���v���R�[�h use Benchmark; $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $s = "���{����ݺ�\0ABC" x 100; timethese (1000, { re => q{ @re = $s =~ /$char/go; }, xs => q{ @xs = sjsplit($s); }, }); ���� Benchmark: timing 1000 iterations of re, xs... re: 7 wallclock secs ( 6.65 usr + 0.00 sys = 6.65 CPU) @ 150.38/s xs: 6 wallclock secs ( 5.33 usr + 0.00 sys = 5.33 CPU) @ 187.62/s XSUB void sjsplit(arg) SV* arg PROTOTYPE: $ PREINIT: unsigned char *str, *p, *e; STRLEN ch, byte, len = 0; PPCODE: str = (unsigned char *)SvPV(arg,byte); e = str + byte; for (p = str; p < e; p++) { if (0x81 <= *p && *p <= 0x9F || 0xE0 <= *p && *p <= 0xFC) ++p; ++len; } EXTEND(SP,len); for (p = str; p < e; p += ch) { ch = (0x81 <= *p && *p <= 0x9F || 0xE0 < *p && *p <= 0xFC) ? 2 : 1; PUSHs(sv_2mortal(newSVpv(p,ch))); } �F�X�ȕ��� �����ŕ����ł݂��悤�ɁA�����������ɂ́Am//g���֗��ł��B �T���v���R�[�h $onebyte = '[\x00-\x7F\xA1-\xDF]'; $twobyte = '(?:[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; #�P�o�C�g�����̉�ƂQ�o�C�g�����̉�ɕ�����B while ($str =~ /\G($onebyte*)($twobyte*)/g) { push @one, $1 if $1 ne ''; push @two, $2 if $2 ne ''; } #��_���Ō�̕����ƂȂ�悤�ɕ�������B # '�B' �ł͂������A�����ɂ���Ă͒��ӂ��K�v�B @sentences = $str =~ /\G$char*?(?:�B|�D|$)/g; ����̒����Ő肻�낦�� ��������������̒����i�o�C�g���j�Ő肻�낦��Ȃ�A���̂悤�ɂ��Ăł��܂��B �T���v���R�[�h $char = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; $str = '�킴�킴EUC-JP�ɕϊ����Ȃ��ŁAShift-JIS�̂܂���'. '�ł����炢�����ǁA�Ȃ��Ȃ��ʓ|���˂��B'; print join "\n", bytebreak($str,15); sub bytebreak{ my($byte,$bmax,$ch,@lines); my $str = shift; $byte = $bmax = shift; foreach $ch ($str =~ /$char/go) { $byte += length $ch; # ���̕������p������������ if ($byte <= $bmax) { $lines[-1] .= $ch; # �������Ȃ���Όp������ } else { $byte = length $ch; push @lines, $ch; # �����Ȃ���Ύ��̍s�� } } return @lines; # ����������Ȃ��ꍇ�ɁA�E���X�y�[�X�Ŗ��߂�����B # return map {$_ .= ' ' x ($bmax - length)} @lines; } �֑������́A�Ⴆ�Ύ��̂悤�ɂ��čs���܂��B�P���ȍl�����ł́A�֑������́A(i) �s���֑������̒��O�ʼn��s���Ȃ��G(ii) �s���֑������̒���ʼn��s���Ȃ��G�Ƃ������ƂɂȂ�܂��B�܂��A"(a)"�̂悤�ɁA�s���֑������ƍs���֑������̊ԂɂP���������Ȃ��A�����������́A���̕����̑S�̂������s�ɂȂ�_�ɂ��z�����܂��B ���̗�ł͕�����̒������o�C�g�� length �ŋK�肵�Ă��܂����A�������ƃo�C�g���͕K��������Ⴕ�܂���̂ŁA�ꍇ�ɂ���Ắi�M���V�A�����͔��p���ɂ������Ƃ��A�܂��̓v���|�[�V���i���̏ꍇ�Ƃ��AUTF-8�̏ꍇ�Ƃ��j��������Ԃ� width �̂悤�Ȋ����`����K�v������ł��傤�B �܂��A���̗�̂����ł́A�֑��ɂ�閳���s���������ň�s��蒷���Ȃ�ꍇ�́A�݂͂�����h���܂���B���ꂪ����Ȃ�A�֑��̗�O�Ƃ��čs����i�Ⴆ��$next�̒�����$bmax���Ȃ��悤�ɂ���j���u���K�v�ł��傤�B �T���v���R�[�h $CharRE = '(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; # �s���֑������i�ꕔ���j $NotAtBegin = q/)]}�f�h�v�x�j�n�p!,.:;?�A�B�X�J�K�I�C�D�F�G�H/; # �s���֑������i�ꕔ���j $NotAtEnd = q/([{�e�g�u�w�i�m�o/; # �n�b�V������� @NotAtBegin{$NotAtBegin =~ m/$CharRE/g} = (); @NotAtEnd{ $NotAtEnd =~ m/$CharRE/g} = (); $Str = '�킴�킴EUC-JP�ɕϊ����Ȃ��ŁAShift-JIS�̂܂���'. '�ł����炢�����ǁA�Ȃ��Ȃ��ʓ|���˂��B'; print join "\n", linebreak($Str,16); sub linebreak{ my($byte,$i,@chars,$next,@lines); my($str, $bmax, $pad) = @_; # $byte�͎��̕������p���������Ƃ��̒��� $byte = $bmax; # �������s�ł��邽�߂̏����l�B # �����P�ʂɂ炷 @chars = $str =~ /$CharRE/go; for ($i=0; $i<@chars; $i++) { $next .= $chars[$i]; # ���̕��� $byte += length $chars[$i]; # ���̕������p������������ # ���̕������s���֑��̂Ƃ� next if $i+1 < @chars && exists $NotAtEnd{ $chars[$i] }; # ���̕����̎����s���֑��̂Ƃ� next if $i+1 < @chars && exists $NotAtBegin{ $chars[$i+1] }; # �s�̐U�蕪�� # �������Ȃ���Όp������ if ($byte <= $bmax) { $lines[-1] .= $next; } # �����Ȃ���Ύ��̍s�� else { push @lines, $next; $byte = length $next;# �V�����s�̒��� } $next = ''; } return defined $pad && 1 == length $pad # �l�ߕ� ? map {$_ .= $pad x ($bmax - length)} @lines : @lines; } �Ԃ牺����֑��̏ꍇ�i$bmin ���� $bmax�͈̔͂������j�B $bmin = $bmax - 2; # �Ⴆ�B # �s�̐U�蕪�� # �������Ȃ���Όp������ if ($byte <= $bmax && @lines && length $lines[-1] < $bmin){ $lines[-1] .= $next; } # �����Ȃ���Ύ��̍s�� else { push @lines, $next; $byte = length $next;# �V�����s�̒��� } ���{�ꕶ�������ёւ��� ������������\�����Ƀ\�[�g���郂�W���[���Ƃ��āAShiftJIS/Collate.pm ������܂��B����Ǝg������Perl�̃y�[�W�ɖ߂�Ό�����܂��B �u�ǂ݁E�\�L�ƍ��v�͎��̂悤�ɂ��čs���܂��BsortYomi���\�b�h�̎�郊�X�g�̊e�v�f�́A[ �\�L��, �ǂݗ� ]�Ƃ����z�t�@�����X�łȂ���Ȃ�܂���B �T���v���R�[�h use ShiftJIS::Collate; my @data = ( [qw/ ���R ����� /], [qw/ ���c �Ȃ��� /], [qw/ �c�� ���Ȃ� /], [qw/ ��� ������ /], [qw/ ���� ������ /], [qw/ ���� ������ /], [qw/ ���R ����� /], [qw/ ���� ������ /], [qw/ ���� ������ /], [qw/ �R�c ��܂� /], [qw/ �i�c �Ȃ��� /], ); @sort = ShiftJIS::Collate->new()->sortYomi(@data); �u�ȈՑ�\�ǂݏƍ��v�͎��̂悤�ɂ��čs���܂��BsortDaihyo���\�b�h�̎�郊�X�g�̊e�v�f�́A[ �\�L��, �ǂݗ� ]�Ƃ����z�t�@�����X�łȂ���Ȃ�܂���B �T���v���R�[�h #!perl use ShiftJIS::Collate; my @data = ( [qw/ �Ɍv�Z ��ނ��������� /], [qw/ JIS�ԍ� ������ /], [qw/ ���B ������ /], [qw/ ���� ����ǂ� /], [qw/ �͐� ������ /], [qw/ �͓� ���킿 /], [qw/ �p�c ������ /], [qw/ �p�c ���ǂ� /], [qw/ �@�� �����炬 /], [qw/ �͓� ������ /], [qw/ �K�R ������� /], [qw/ �K�R ������� /], [qw/ ���� ���Ƃ� /], [qw/ ���a�c ���킾 /], [qw/ �� ���킵�� /], [qw/ ��c ���킾 /], [qw/ �V�c ���킾 /], [qw/ �p�c �̂� /], [qw/ �ƈ� ���� /], [qw/ �y�� ���� /], [qw/ �y�� ���� /], [qw/ �ˈ� �Ƃ� /], [qw/ �˓c �Ƃ� /], [qw/ �y�� �ǂ� /], [qw/ �y�� �ǂ� /], [qw/ �y�� �Ƃ� /], [qw/ ���c �₷�� /], ); @sort = ShiftJIS::Collate->new()->sortDaihyo(@data); Shift-JIS�̊������܂ރt�@�C����/�p�X�� �{���ڂ́A���̍��ڂɑ����āA�����s�[���̂܂܋L�q���Ă��܂��̂ŁA���������Q�l�ɂ��悤�Ǝv�����ꍇ�A�\���ɒ��ӂ̏�A�[���ł���܂ł������̍�Ɗ��Ńe�X�g���Ă��������B Windows (95/98/NT/2000�Ȃ�) �ŁA�t�@�C������p�X���������i�����ł͓�o�C�g�����̈Ӗ��Ŏg���Ă��܂��̂ŁA��������L���Ȃǂ��܂݂܂��B�j���܂ޏꍇ�APerl�ň����ۂɖ�肪������\��������܂��B �����o�C�g�� "\x5C" �̊��������t�@�C����/�p�X�� �f�B���N�g��������imkdir, rmdir, opendir, -d �Ȃǁj�A�t�@�C��������iopen, unlink, -f �Ȃǁj�ŁA�A�N�Z�X�ł��Ȃ����Ƃ�����܂��B �t�@�C���̏ꍇ�́A�����ɔ��p�X�y�[�X��Y����ƃA�N�Z�X�ł���ꍇ������܂��i�Ⴆ�A-f '�\ ' �܂��� -f "\x95\x5C\x20" �Ȃǁj�B �f�B���N�g���̏ꍇ�́A������ / �� \ ��Y����ƃA�N�Z�X�ł���ꍇ������܂��i�Ⴆ�A-d '�\/' �܂��� -d "\x95\x5C/" �Ȃǁj�B�����ɓY���镶���p�X�y�[�X�Ƃ��Ă��A���܂��A�N�Z�X�ł���ꍇ������܂��B�Y���镶���̌��Ƃ��āA�O��ނ̕����i�X���b�V���A�~�L���A�j�������܂������A�ǂ̕������悢���́A���ɂ���ĈقȂ�ꍇ������悤�ł��B�g�p����O�ɏ\���Ƀe�X�g���Ă��������B �Ȃ��A�f�B���N�g�����̖����� / �� \ ��Y����ꍇ�A���Ƃ��Ɩ����� / �� \ ���t���Ă���ꍇ�ɂ́A��d�ɕt����Ƃ��܂��s���Ȃ������ꂪ����܂��̂ŁA������A���̑O�Ɍ��������ق����悢�ł��傤�B �ǂ����Ă��������s���ŐM���ł��Ȃ��ꍇ�́A`` �܂��� qx// �� system()���Ȃǂ�ʂ���Windows�̃R�}���h���ĂԂ̂��ǂ��Ǝv���܂��B ���܂� Shift-JIS �ŏ����ꂽ POD �� Perl 5.8.1, 5.8.2 �� Pod::Html �� HTML �ɕϊ������ꍇ�A�A���J�[�̖��O�́A �p�����Ɖ������� [0xA6..0xDF] �������A ���̊e�o�C�g�͉����i'_'�j�ɕϊ������悤�ł��B ��̓I�ɂ́Ause locale; ���ŁAlc �� s/\W/_/g �����s�������� (cf. Pod::Html::anchorify) �ɂȂ�܂��B [2003-11-18] Perl�̃y�[�W