During recent coding, using PHP, I found that the explode function behaves in a non-ideal way (for me) when trying to split an empty string:
<?php
$res = explode(",", "");
print_r($res);
?>
produces:
Array
(
[0] =>
)
I was expecting (needing?) an empty array. After thinking about it a bit more, it is clear that returning a single empty string is a logical return value. However, different languages have different returns for this special case. Python (2.6.4 and 3.1.2) are both like PHP (5.3.5), but Perl (5.10.1) behaves differently:
For PHP:
<?php
function test_explode($txt)
{
print("Exploding '$txt' to give [" );
$sep = "";
$res = explode(",", $txt);
foreach ($res as $elt)
{
print "$sep'$elt'";
$sep = ", ";
}
print "]\n";
}
test_explode("a,b");
test_explode(",");
test_explode("");
?>
produces:
Exploding 'a,b' to give ['a', 'b'] Exploding ',' to give ['', ''] Exploding '' to give ['']
For Python:
def test_split(txt):
print("Splitting '%s' to give %s" % (txt, txt.split(",")))
test_split("a,b")
test_split(",")
test_split("")
produces:
Splitting 'a,b' to give ['a', 'b'] Splitting ',' to give ['', ''] Splitting '' to give ['']
For Perl:
sub test_split
{
my $txt = shift;
my @res = split(",", $txt);
print("Splitting '$txt' to give [");
my $sep = "";
foreach my $elt (@res)
{
print "$sep'$elt'";
$sep = ", ";
}
print "]\n";
}
test_split("a,b");
test_split(",");
test_split("");
produces:
Splitting 'a,b' to give ['a', 'b'] Splitting ',' to give [] Splitting '' to give []