The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use FindBin; # only for this example - load local Udev::FFI module
use lib "$FindBin::Bin/../lib"; # only for this example - load local Udev::FFI module

use Udev::FFI;



my $udev = Udev::FFI->new() or
    die "Can't create Udev::FFI object: $@.\n";

my $monitor = $udev->new_monitor() or
    die "Can't create udev monitor: $@.\n";


unless($monitor->filter_by_subsystem_devtype('net')) {
    warn "Ouch!";
}

if($monitor->start()) {
    #now insert your usb ethernet adapter

    for(;;) {
        my $device = $monitor->poll(); #blocking read
        my $action = $device->get_action();

        print 'ACTION: '.$action, "\n";
        print 'DEVPATH: '.$device->get_devpath(), "\n";
        print 'SYSNAME: '.$device->get_sysname(), "\n";

        if($action ne 'remove') {
            print 'MACADDR: '.$device->get_sysattr_value('address'), "\n";
        }

        print "\n\n";
    }
}