#!/usr/bin/perl use strict; use warnings; my @example = ( 'RepeatingGroup = Waiver, Flatten, out', 'RepeatingGroup = Waiver, out', 'RepeatingGroup = Waiver, out, Flatten', 'RepeatingGroup = Waiver , in', 'RepeatingGroup = Waiver , Flatten', ); foreach my $example (@example) { $example =~ s/^RepeatingGroup =\s*//; print "This is what .ini parser says: $example\n"; my ($name,$direction,$flatten) = parseRepeatingGroup($example); print " name = $name\n". " direction = $direction\n", " flatten = $flatten\n"; } sub parseRepeatingGroup { my $value_text = shift; my ($name,$rest) = $value_text =~ /^\s*(\S+)(.*)+/; my $direction = ($value_text =~ /\bin\b/i) ? 'in' : 'out'; my $flatten = ($value_text =~ /\bFLATTEN\b/i)? 1: 0; return ($name,$direction,$flatten); } __END__ This is what .ini parser says: Waiver, Flatten, out name = Waiver, direction = out flatten = 1 This is what .ini parser says: Waiver, out name = Waiver, direction = out flatten = 0 This is what .ini parser says: Waiver, out, Flatten name = Waiver, direction = out flatten = 1 This is what .ini parser says: Waiver , in name = Waiver direction = in flatten = 0 This is what .ini parser says: Waiver , Flatten name = Waiver direction = out flatten = 1