in reply to Opening a USB drive for storing info.

Don't forget to examine $! for the actual cause for a failure with opendir.

The following is your code cleaned up a little bit:

for my $i (0..5) { my $dir = $i ? "/media/disk-$i/" : "/media/disk/"; opendir my $dh, $dir or die "Can't opendir $dir: $!"; print $dir,"\n"; closedir $dh; }

Replies are listed 'Best First'.
Re^2: Opening a USB drive for storing info.
by Steve_BZ (Chaplain) on May 23, 2011 at 00:01 UTC

    Hi Wind,

    Nice coding. Thanks for the tidy up.

    I changed it a little. I changed 'die' to 'warn', because I wanted all the possibilities tested, and I only 'closed' where the open had been successful. I didn't know you could write "for .." like that and I've never got around to using the "? .. : .." operator. So thanks for all that.

    So:

    #!/usr/bin/perl -w use strict; for my $i (0..5) { my $dir = $i ? "/media/disk-$i/" : "/media/disk/"; if (opendir my $dh, $dir){ print $dir," opened successfully.\n"; closedir $dh; } else { warn "Can't opendir $dir: $!"; } }

    So I inserted a USB-drive, ran the code and I got (Sorry, my machine is set to Portuguese. "Arquivo ou diretório não encontrado" means "file or directory not found ... ". ):

    Can't opendir /media/disk/: Arquivo ou diretório não encontrado at /ho +me/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-1/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-2/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-3/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-4/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-5/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10.

    before I used the dolphin file-manager and afterwards I got:

    /media/disk/ opened successfully. Can't opendir /media/disk-1/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-2/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-3/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-4/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10. Can't opendir /media/disk-5/: Arquivo ou diretório não encontrado at / +home/image/Documents/Endoscopia/Dir_Test.pl line 10.

    So It looks as though I need to do something else. In fact if I do $dir I get the same result:

    $ dir /media/disk/ dir: impossível acessar /media/disk/: Arquivo ou diretório não encontr +ado

    Thanks again for a great post.

    Regards

    Steve

      maybe you need to use something called dmesg to see diagnostic info like [ 131.981346] hub 1-0:1.0: unable to enumerate USB device on port 4