#!/usr/bin/perl use strict; use warnings; use Data::Dumper; die "Please provide minimum one file for parsing!\n" if @ARGV < 1; sub fileProcessing { my ( @files ) = @_; foreach my $file ( @files ) { open(my $fh, '<' , $file) or die "Could not open file '$file' $!"; my $pdus = do { local $/; <$fh> }; close $fh or die "Could not close file '$file' $!"; chomp( $pdus ); # my @matches = $pdus =~ /[^{}\s]+ | \{ (?: (?R) | [^{}]+ )+ \} /gx; my @matches = $pdus =~ /[^{}]+ | \{ (?: (?R) | [^{}]+ )+ \} /gx; print Dumper \@matches; } return; } fileProcessing( @ARGV );