develooper Front page | perl.beginners | Postings from October 2009

Re: split n characters into n chunks

Thread Previous
From:
Shawn H Corey
Date:
October 25, 2009 07:22
Subject:
Re: split n characters into n chunks
Message ID:
4AE45F1A.20405@gmail.com
Shlomi Fish wrote:
> Why not use perldoc -f substr ( http://perldoc.perl.org/functions/substr.html 
> ) in a loop? Alternatively one can use unpack but I'm not sure how well it 
> would handle Unicode characters.

You're right, substr works best.

#!/usr/bin/env perl

use strict;
use warnings;

use Data::Dumper;

# Make Data::Dumper pretty
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent   = 1;

# Set maximum depth for Data::Dumper, zero means unlimited
$Data::Dumper::Maxdepth = 0;

use Benchmark qw(:all);

my $word = "thequickbrown";
my $size = 3;

cmpthese( 50_000, {
  'via_arrays' => \&via_arrays,
  'via_substr' => \&via_substr,
  'via_unpack' => \&via_unpack,
});

# for testing only
# via_arrays();
# via_substr();
# via_unpack();

sub via_arrays {
  my @array = split //, $word;
  my $max = @array - $size;
  my @list = ();
  for my $i ( 0 .. $max ){
    push @list, join '', @array[ $i .. $i+$size-1 ];
  }
  # print Dumper \@list;  #for testing only
}

sub via_substr {
  my $max = length( $word ) - $size;
  my @list = ();
  for my $i ( 0 .. $max ){
    push @list, substr( $word, $i, $size );
  }
  # print Dumper \@list;  #for testing only
}

sub via_unpack {
  my $max = length( $word ) - $size;
  my @list = ();
  for my $i ( 0 .. $max ){
    push @list, (unpack( "A${i}A$size", $word ))[1];
  }
  # print Dumper \@list;  #for testing only
}


-- 
Just my 0.00000002 million dollars worth,
  Shawn

Programming is as much about organization and communication
as it is about coding.

I like Perl; it's the only language where you can bless your
thingy.

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About