Front page | perl.perl5.porters |
Postings from July 2012
Re: [perl #113994] [META] seek and tell operate on bytes
Thread Previous
|
Thread Next
From:
Irek Szczesniak
Date:
July 4, 2012 14:27
Subject:
Re: [perl #113994] [META] seek and tell operate on bytes
Message ID:
CALnxO56fSObc1u6Qx=P7UPd_aAKp7bVZG79WkNv0h=ixtvgckg@mail.gmail.com
On Wed, Jul 4, 2012 at 11:17 PM, Jesse Luehrs <perlbug-followup@perl.org> wrote:
> # New Ticket Created by Jesse Luehrs
> # Please include the string: [perl #113994]
> # in the subject line of all future correspondence about this issue.
> # <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=113994 >
>
>
> This is a bug report for perl from doy@tozt.net,
> generated with the help of perlbug 1.39 running under perl 5.16.0.
>
>
> -----------------------------------------------------------------
> [Please describe your issue here]
>
> Collecting all of the reports related to (sys)?seek and tell operating
> on bytes rather than characters.
>
> [Please do not change anything below this line]
> -----------------------------------------------------------------
> ---
> Flags:
> category=core
> severity=low
> ---
> Site configuration information for perl 5.16.0:
>
> Configured by doy at Sat Jun 2 13:46:21 CDT 2012.
>
> Summary of my perl5 (revision 5 version 16 subversion 0) configuration:
>
> Platform:
> osname=linux, osvers=3.3.5-1-arch, archname=x86_64-linux
> uname='linux xtahua 3.3.5-1-arch #1 smp preempt mon may 7 19:57:51 cest 2012 x86_64 gnulinux '
> config_args='-de -Dprefix=/home/doy/perl5/perlbrew/perls/perl-5.16.0'
> hint=recommended, useposix=true, d_sigaction=define
> useithreads=undef, usemultiplicity=undef
> useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
> use64bitint=define, use64bitall=define, uselongdouble=undef
> usemymalloc=n, bincompat5005=undef
> Compiler:
> cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
> optimize='-O2',
> cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
> ccversion='', gccversion='4.7.0 20120505 (prerelease)', gccosandvers=''
> intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
> d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
> ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
> alignbytes=8, prototype=define
> Linker and Libraries:
> ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
> libpth=/usr/local/lib /lib/../lib /usr/lib/../lib /lib /usr/lib
> libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
> perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
> libc=/lib/libc-2.15.so, so=so, useshrplib=false, libperl=libperl.a
> gnulibc_version='2.15'
> Dynamic Linking:
> dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
> cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector'
>
> Locally applied patches:
>
>
> ---
> @INC for perl 5.16.0:
> /home/doy/perl5/local/
> /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0/x86_64-linux
> /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/site_perl/5.16.0
> /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0/x86_64-linux
> /home/doy/perl5/perlbrew/perls/perl-5.16.0/lib/5.16.0
> .
>
> ---
> Environment for perl 5.16.0:
> HOME=/home/doy
> LANG=en_US.UTF-8
> LANGUAGE (unset)
> LD_LIBRARY_PATH (unset)
> LOGDIR (unset)
> PATH=/home/doy/perl5/perlbrew/bin:/home/doy/perl5/perlbrew/perls/perl-5.16.0/bin:/home/doy/.bin/marathon:/home/doy/.bin/nethack:/home/doy/.bin/ghc:/home/doy/.bin:/usr/local/sbin:/usr/local/bin:/usr/lib/ccache/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl
> PERL5LIB=/home/doy/perl5/local/
> PERLBREW_BASHRC_VERSION=0.33
> PERLBREW_HOME=/home/doy/.perlbrew
> PERLBREW_MANPATH=/home/doy/perl5/perlbrew/perls/perl-5.16.0/man
> PERLBREW_PATH=/home/doy/perl5/perlbrew/bin:/home/doy/perl5/perlbrew/perls/perl-5.16.0/bin
> PERLBREW_PERL=perl-5.16.0
> PERLBREW_ROOT=/home/doy/perl5/perlbrew
> PERLBREW_VERSION=0.43
> PERL_BADLANG (unset)
> PERL_CPANM_OPT=-q --mirror file:///home/doy/perl5/minicpan/ --mirror http://mirrors.kernel.org/cpan/ --mirror http://search.cpan.org/CPAN --prompt
> SHELL=/bin/zsh
>
So how do you want to fix that? Seeking in characters instead of bytes
will require to actually read all characters between the old and new
position since there are encodings like ja_JP.PCK (ShiftJIS) which do
not allow a graceful recover if you seek into the middle of it and
then look for the next valid multibyte character sequence. There's
also no way to guess how many characters are between two file
positions since a single character can occupy from 1 up to MB_CUR_MAX
(usually 5 or 6 depending on platform) bytes.
Irek
Thread Previous
|
Thread Next