in reply to Converting python list range expressions to perl
G'day ibm1620,
I think what you're looking for is splice.
Test script:
#!/usr/bin/env perl use v5.36; use constant { AREF => 0, PYTHON => 1, EXP => 2, }; use Test::More; my @test_array = 'a' .. 'g'; my @tests = ( [\@test_array, '[:3]', 'abc'], [\@test_array, '[:-3]', 'abcd'], [\@test_array, '[3:]', 'defg'], [\@test_array, '[-3:]', 'efg'], ); plan tests => 0+@tests; for my $test (@tests) { is get_array_slice_by_python_expr($test->@[AREF, PYTHON]), $test->[EXP], "Testing: $test->[PYTHON]"; } sub get_array_slice_by_python_expr ($aref, $python) { state $re = qr{^\[(|-?\d+):(|-?\d+)\]$}; my @temp_array = $aref->@*; my ($offset, $length) = $python =~ $re; $offset ||= 0; return length($length) ? join('', splice @temp_array, $offset, $length) : join('', splice @temp_array, $offset); }
Output:
1..4 ok 1 - Testing: [:3] ok 2 - Testing: [:-3] ok 3 - Testing: [3:] ok 4 - Testing: [-3:]
— Ken
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Converting python list range expressions to perl
by ibm1620 (Hermit) on Dec 04, 2022 at 17:13 UTC | |
by kcott (Archbishop) on Dec 04, 2022 at 18:45 UTC | |
by ibm1620 (Hermit) on Dec 04, 2022 at 23:22 UTC | |
by kcott (Archbishop) on Dec 05, 2022 at 06:14 UTC | |
by LanX (Saint) on Dec 05, 2022 at 14:23 UTC | |
| |
by ibm1620 (Hermit) on Dec 05, 2022 at 21:36 UTC | |
| |
|
Re^2: Converting python list range expressions to perl
by Anonymous Monk on Dec 04, 2022 at 14:20 UTC | |
by kcott (Archbishop) on Dec 04, 2022 at 17:45 UTC |