Just want to point out that the algorithm as given is incorrect. `n` is the number of elements in the array, so the first line should read:

`function reverse_in_place(a[0 .. (n - 1)])
`

Alternatively, you would need to change the arithmetic:

`function reverse_in_place(a[0 .. n])
for i from 0 to floor( ((n + 1) / 2) - 1 )
tmp := a[i]
a[i] := a[n - i]
a[n - i] := tmp
`

**Update 1:** Implementing the algorithm in Perl is straightforward, provided you are allowed to use the built-in functions `split` and `join` (`scalar` isn’t really needed in the sub):

`use strict;
use warnings;
my $string = 'abcdefghi';
print 'Original string: ', $string, "\n";
print 'Using function: ', reverse_in_place($string), "\n";
print 'Using reverse: ', scalar reverse ($string), "\n"; # For c
+omparison
sub reverse_in_place
{
my ($string) = @_;
my @array = split //, $string;
my $n = scalar @array;
for (0 .. $n / 2 - 1)
{
my $tmp = $array[$_];
$array[$_] = $array[$n - $_ - 1];
$array[$n - $_ - 1] = $tmp;
}
return join('', @array);
}
`

**Update 2:** Fixed out-by-one error in the `for` loop. Thanks to j0se for pointing it out.

Hope that helps,

Comment onRe: reverse a string in placeSelectorDownloadCode