#! /usr/bin/perl use strict; use warnings; use List::Util q(first); sub csp { my ($n, $s) = (-1, shift // return); while (++$n < length($s)) { my $c = substr($s,$n,1); last if first { substr($_,$n,1) ne $c } @_; } substr($s,0,$n); } print csp(qw(ahhaaaaa aha ahem));