Print Student Names from CSV
It looks quite good.  Perldoc, use strict, use warnings are all good practices.  The formatting is good, and the code is readable.

I don't recommend hard-coding the name of the data file in your program.  That turns it from a general-purpose program into throwaway code.  If you use the default filehandle &lt;&gt;, then Perl will do the "right thing": if a filename is specified as a command-line parameter, it will read from that file; if not, it will read from STDIN.  As a bonus, it saves you the trouble of having to call open().  (You neglected to explicitly close(STUDENTS), by the way.)

The CSV-parsing code is repeated for the header row and for the body.  It should be made into a subroutine.

(my $id, my $name) could be written more idiomatically as my ($id, $name).

I find it annoying to use string interpolation like print "$something\n" just because you need a newline.  I suggest taking advantage of the newish say feature.

The facts that you want the second column, and that the columns are the $id and $name, are both hard-coded.  Perhaps you should add an assertion.

Suggested implementation

use strict;
use warnings;
use feature qw(say);

sub columns {
    my $line = shift;
    return unless defined $line;
    chomp($line);
    split ',', $line;
}

my @column_names = columns(scalar &lt;&gt;);

die unless $column_names[1] eq 'Name';
say "Printing Student ${column_names[1]}s...";
while (my ($id, $name) = columns(scalar &lt;&gt;)) {
    say $name;
}