Tag Archive
3D 3dprinting android ant BigData bitcoin Browsers C/C++ cryptocurrency CSS dd ddrescue dogecoin DOS editors find Games Git hadoop html html5 Java Linux litecoin node perl Postgres Programming Python scripting Shell SQL Swing TOTK Utilities utilization vi Video Web Web Design Wifi Windows Wordpress XML Zelda
Perl: Arrays
I use perl arrays in some of my programs, and just started to look at the regular things that I do with these arrays and thought it would be useful to keep a list of frequently used items.
Create a variable specified as an array.
my @vararray
Add an item to the beginning of an array
unshift (@vararray, "File2");
Add an item to the end of an array
push (@vararray, "File1");
Remove an item from the beginning of an array
my $var = shift(@array);
Remove an item from the end of an array
pop(@array)
Clear an array
@vararray = ();
Address an item in an array
print $vararray[0] ;
Get the size of an array
my $arraysize = @array;
Remove an item based on the index
delete @vararray[1];
Iterate over an array
foreach my $var (@vararay) { print "$var n"; } # or my $size = @vararray; my $i; for ($i = 0 ; $i < @size; $i++) { print "$vararray[$i]n"; }
Linux:Script to find files
I regularly have to find where a file is located and usually use find:
find . | grep
Where
#!/bin/sh if [ $# -lt 1 ]; then echo 1>&2 Usage: $0 "" exit 127 fi icase= while [ $# -ge 1 ]; do case $1 in -i) icase=$1;; *) search=$1 ;; esac shift done find . | grep $icase $search
This is just a simple script which I have named ffind that searches starting from the current directory. This lets me search with the following commands:
ffind bak$
This will search for all files that end with “bak” .
ffind -i edr
This will search for all files with “edr” regardless of case
Using find and grep to search files
I have been searching through source code and files for years. And I used to use find with a few arguments to get what I was looking for.
find . -exec grep {} ; -print
I used the -print after the exec arguments to show the file only when the grep succeeded. This worked but was a bit to type each time I used it. So I came up with a little script that would help me to search for the an argument and even allow a case insensitive search as well.
#!/bin/sh if [ $# -lt 1 ]; then echo 1>&2 Usage: $0 "" exit 127 fi icase= search= while [ $# -ge 1 ]; do case $1 in -i) icase=$1;; *) search=$1 ;; esac shift done find . -type f -print0 | xargs -0 grep $icase $search
The script takes at least one argument and excepts a ‘-i’ argument to make grep use a case insensitive search. This will print the file name and the line that matches the search term. It can be easily adapted to show the count of matched patterns (‘-c’) or the line number (‘-n’).
How to add library paths to perl
I need to write custom Perl libraries sometimes and an easy method to make sure that they are found on the path is to use the PERL5LIB environment variable.
So either set it in your current environment or in a shell you can just specify the contents before you run your script.
PERL5LIB=/PATH/WHERE/LIB/IS perl scripttorun.pl
Perl: CPAN installing modules
Sometimes it is necessary to install other modules into the Perl environment. Luckily there is a great repository of modules known as CPAN (The Comprehensive Perl Archive Network). This lets you install modules to help with encryption, XML,YAML, and many other things. There are a few ways to install a package and here are the ones that I use the most.
Using the CPAN shell:
perl -MCPAN -e shell
This will open a command prompt that will let you search for CPAN modules with:
i /PACKAGENAME/
or install a new module:
install /DateTime/
The nice thing about installing with CPAN is that it will look for the dependencies and suggest installing them before the module you requested.
NOTE:This can take some time and your dependencies could have dependencies.
The other method I use is to skip the CPAN prompt and just directly execute the install of the module:
perl -MCPAN -e 'install DateTime'
This is just the most basic of usage, and there is probably a lot more you can do, but I have not had to use much more than this.
Retrieve drive letter on Windows
The other day I had to write a script to change to a working directory and back to the original directory. The problem was they were on different drives on Windows. So I had to find a way to capture the drive letter
and switch back to that drive. When using the following command,
cd F:somedir
you are not moved to the “F:” drive without an explicit “F:” command.
The cd Command on windows will show the current directory location. Using some string manipulation on that and capturing it to a variable allows us to go back to that drive.
REM Capture the current drive letter set ORIGDRIVE=%cd:~0,2% F: REM some other scripting things here REM Return to the original drive letter ORIGDRIVE
The first line captures the current drive letter by specifying the first character with 0 and the ,2 states to pick up the next 2 characters which would hold the “C:” or whatever drive you started on.
Perl: Missing ParserDetails.ini
I have some scripts that were giving me the following message:
could not find ParserDetails.ini in /usr/lib/perl5/vendor_perl/5.10/XML/SAX
The way that I worked around this message was to create the ParserDetails.ini file in the /usr/lib/perl5/vendor_perl/5.10/XML/SAX directory with the following contents.
[XML::SAX::PurePerl] http://xml.org/sax/features/namespaces = 1