I am trying to split a file into 2 parts.

File format is following: filename_status_date.filetype

and the files are:

apple_india_20110218091255.txt
apple_india_20110221112444.txt
apple_india_20110301112444.txt

I need to split so that first part carries "apple_india"
and second part carries the "20110301112444.txt".

I tried the following:

my ($fruit,$end)=split(/\_/);

But that splits the file right after the first "_" as

$fruit = apple
$end = india

How can I make it work. My arguments in Split() is wrong.
Any help

Recommended Answers

All 2 Replies

#!/usr/bin/perl
use strict;
use warnings;

while (<DATA>){
    my ($fruit,$end)=split(/\_ #Match an underscore
                           (?!.*\_) #Negative lookahead.
                                    #Match only if not followed by characters
                                    #followed by another underscore
                           /x);     #x means allow multi-line regex with comments
    print "My fruit = $fruit\n";
    print "My end = $end\n";
}
__DATA__
apple_india_20110218091255.txt
apple_india_20110221112444.txt
apple_india_20110301112444.txt

http://www.regular-expressions.info/lookaround.html

Perfect solution.
And thanks for wonderful explanation David!

Learned a few new things here...

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.