Assuming you have appropriate input, the code you've posted will function.
warnings suggests you should be typing
$date_array[2] in place of
@date_array[2] (the latter is actually a slice instead of a scalar element), but this should not affect your result. Are you sure you are feeding it what you think you are? The following works as I would expect:
#!/usr/bin/perl
use strict;
use warnings;
my $date = '1/2/03';
my @date_array = split(/\//, $date);
my $new_date = join('-', $date_array[2], $date_array[1], $date_array[0
+]);
print $new_date;