Yet Another *::Util Plug:

Scalar::Util::reftype finds the underlying type even for objects.
(Unfortunately for non-refs it returns undef instead of '' as the
builtin ref does.)

In article <[EMAIL PROTECTED]>,
Abigail <[EMAIL PROTECTED]> wrote:
>#!/usr/bin/perl -w
>
>use strict;
>use warnings 'all';

use Scalar::Util 'reftype';

>sub rotate {

    no integer;  # I like to explictly say it per sub when I'm depending on it

>    return () unless   $_ [1];
>    die "Not an array ref" unless "ARRAY" eq ref $_ [1];

    die "Not an array ref" unless ref $_ [1] && "ARRAY" eq reftype $_ [1];

>    return [] unless @{$_ [1]};
>    my $l = $_ [0] % @{$_ [1]};
>    [@{$_ [1]} [$l .. $#{$_ [1]}, 0 .. $l - 1]]
>}
>  
>my $array = ['A' .. 'E'];

bless $array; # simulate rotating an array-based object

>for my $r (-15 .. 15) {
>    printf "Rotate %3d: @{rotate $r, $array}\n", $r;
>}

I didn't think that was obfuscated.
How about this:

sub rotate {[$#{$_[!$||$|]}*@{$_[!!$_^!$_]}?@{$_[!$..!!$.]}[$_[@--@+]%@
{$_[$==~/(?=)//!$`]}..$#{$_[$??!!$?:!$?]},($)?!$):!!$))..$_[$--$-]%@{$_
[$]/$]]}-(!!$++!$+)]:@{$_[!!$^^^!$^^]}]}

Reply via email to