Now, I understand what you are looking for, it wasn't clear to me so far. If you store ' ' into a variable, you don't get the expected behavior as if you hard code:
my @fields = split ' ', $line;
Using "qr/\s+/;" as a split pattern improves the result but still does not yields what you want (you still get an extra empty element at the beginning of the array).
Well, then I don't see any real simple direct solution. Even something like this:
my @fields = split $pattern? $pattern : ' ', $line;
does not do what you are looking for. The only solutions I can think of are either to use the above "qr/\s+/;" and shift the first element if empty, or use a if else construct, or yet this equivalent construct:
my @fields = defined $pattern? split $pattern, $line : split ' ', $line;