Question: I am completely new to the Perl programming.
I am trying the split function.
Here is my code: 

```
#!perl;
use strict;
use warnings;
use Data::Dumper;

my @sections = ("Hard Drive", "Multi Drive");
foreach my $secname (sort @sections) 
{
    my $file_name=split / /, $secname;
    print $file_name;
}

```

so I am trying to get the output like only second word only.

output is 
`22`

The expected output is:

```
drive
drive

```

Here I am trying to get second word but it is not giving the expected output.

Please anyone suggest and help me.

Answer: 
When you get unexpected behaviour from Perl function, your first step should be to read the documentation for that function. The [documentation for `split`](http://perldoc.perl.org/functions/split.html) says this:

> 
> Splits the string EXPR into a list of strings and returns the list in
>  list context, or the size of the list in scalar context.
> 
> 
> 

So, in scalar context, `split` returns the number of element in the list, not the actual list. Your code:

```
my $file_name = split / /, $secname;

```

is calling `split` in scalar context (as you are assigning the result to a scalar variable). In order to get the result that you want, yo need to call `split` in list context. There are a number of ways to achieve this.

```
# Assign to an array, take the second element
my @bits = split / /, $secname;
my $file_name = $bits[1];

# Use a list slice to only get the value that you want
my $file_name = (split / /, $secname)[1];

# Use a list assignment
my (undef, $file_name) = split / /, $secname);

```
Split returns a list of strings in list context only.

As mentioned in the comments above, you can thus get the strings by using list context.

For example, store them all in an array:

```
my @split_string = split / /, $secname;
my $wanted = $split_string[1]; # get the string you want (here, second)

```

If you do not need them later, you can also use an anonymous array for this,
saving yourself a variable:

```
my $wanted = (split / /,$secname)[1];

```

Most functions in perl are context-sensitive, i.e. return different values whether called in list or in scalar context, the return values are usually quite sensible when you think about it, but it takes some getting used to.