#!/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); } #### 1..4 ok 1 - Testing: [:3] ok 2 - Testing: [:-3] ok 3 - Testing: [3:] ok 4 - Testing: [-3:]