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 "
"; �̂悤�ȏꍇ�A\" �ɂ����p���̃G�X�P�[�v�́A�\ �̑�Q�o�C�g��\�̂��߁A\\ " �Ƃ����g�ݍ��킹�ɂȂ�A�G�X�P�[�v���ł�������Ă��܂��B���̂��߁A���̃��e�����́Aperl���猩��ƁA"
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