PDL for Matlab users
From pdl
If you are a MATLAB user, this page is for you. It explains the key differences between MATLAB and PDL to help you get going as quickly as possible.
This document is not a tutorial. For that, go to the PDL Quick Start guide. This document complements the Quick Start guide, as it highlights the differences between MATLAB and PDL.
Contents

Perl
The key difference between MATLAB and PDL is PERL.
Perl is a general purpose programming language with thousands of modules freely available on the web. PDL is an extension of Perl. This gives PDL programs access to more features than most numerical tools can dream of.
Perl itself has excellent documentation at http://perldoc.perl.org. Or use the command perldoc perl.
To search through Perl modules, go to http://www.cpan.org
Language Syntax
Arrays and Matrices
Like MATLAB, PDL is an arraybased numerical programming language. This section covers the basic array syntax.
The shell
 Run the perldl command to start the PDL interactive shell.
Variables
 In Perl, variables always start with the '$' sign.
value = 42 MATLAB $value = 42 PDL
Array
 Use the "pdl" constructor to create a new PDL object.
v = [1,2,3,4] MATLAB $v = pdl [1,2,3,4] PDL
Matrix
A = [ 1,2,3 ; 3,4,5 ] MATLAB $A = pdl [ [1,2,3] , [3,4,5] ] PDL
Display a matrix
disp(A) MATLAB print $A PDL p $A PDL
Matrix Operations
Matrix multiplication
A * B MATLAB $A x $B PDL
Componentwise multiplication
A .* B MATLAB $A * $B PDL
Transpose
A' MATLAB transpose $A PDL
Mathematical Functions
Create a matrix of zeros
A = zeros(5) MATLAB $A = zeros 5,5 PDL
Create a matrix of ones
A = ones(5) MATLAB $A = ones 5,5 PDL
Create a random matrix
A = rand(5) MATLAB $A = random 5,5 PDL
Average of a matrix along one dimension
mean(A) MATLAB average $A PDL
Average of all elements in a matrix
mean(A(:)) MATLAB avg $A PDL
Sum of a matrix along one dimension
sum(A) MATLAB sumover $A PDL
Sum of all elements in a matrix
sum(A(:)) MATLAB sum $A PDL
Maximum of a matrix along one dimension
max(A) MATLAB maximum $A PDL
Maximum of all elements in a matrix
max(A(:)) MATLAB max $A PDL
Minimum of a matrix along one dimension
min(A) MATLAB minimum $A PDL
Minimum of all elements in a matrix
min(A(:)) MATLAB min $A PDL
Generate linearly spaced vector
linspace(a,b,n) MATLAB zeroes(n)>xlinvals(a,b) PDL
Trig functions: sin, cos, tan, asin, acos, atan
 Same in both languages.
Exponential and Log: exp, log, log10
 Same in both languages.
Matrix dimensions
Dimension sizes
size(A) MATLAB shape $A PDL (see also dims $A which returns a perl list/array)
Number of dimensions
ndims(A) MATLAB ndims $A PDL
Number of elements
numel(A) MATLAB nelem $A PDL
Conditionals
A standard conditional ("ifstatement") in Perl behaves like the one in MATLAB, with a more Clike syntax:
% MATLAB conditional if value > MAX disp("Value too large") elseif value < MIN disp("Value too small") else disp("Value is perfect\n") end # Perl conditional if ($value > $MAX) { print "Value too large\n"; } elsif ($value < $MIN) { print "Value too small\n"; } else { print "Value is perfect\n"; }
But unlike MATLAB, Perl has other conditionals that can make the code read more natural. For example, the "unless" statement behaves as the complement to "if":
if ( ! error() ) { ... keep working ... }
unless ( error() ) { ... keep working ... }
The second block reads more natural ("Unless there is an error, keep working"). Another way to make code more readable is to use Perl's postfix notation for "if" and "unless":
print "Warning: Value too large" if ( $value > $MAX );
keep_working() unless ( invalid($value) );
Again, this can read very natural ("Keep working unless there is a problem"). Postfix notation is often used to highlight an error condition (as in the first example) or to express (in the code) that you expect a particular statement to get executed most of the time (as in the second example).
There is another conditional which will be familiar to C programmers:
$result = ( valid($value) ? "ok" : "error" );
This is equivalent to the more verbose:
if ( valid($value) ) { $result = "ok"; } else { $result = "error"; }
List of Matlab functions grouped
Names of the functions can be looked up in the list of Matlab's functions. You might also consider checking out Matlab's online documentation.
Desktop Tools and Development Environment
Feature  Matlab  Perl/PDL 

Startup and Shutdown  
Command to terminate interactive session  exit  exit, quit, x, q 
Script file to run when closing  finish  Not available (?) 
Startup config file  matlabrc  .perldlrc 
Command Window and History  
Data Import and Export
Feature  Matlab  Perl/PDL 

LowLevel File I/O  
Close a file  fclose  close 
File attributes and path handling  
Break a filename into pathandname components  fileparts  File::Basename 
Check that a file exists  ??? errorfree open?  e operator 
Search a directory tree  ???  File::Find 
Mathematics
Feature  Matlab  Perl/PDL 

create a matrix of zeros  zeros  zeros, zeroes 
create a matrix of [0,1] random numbers  rand  random 
transpose  transpose, '  transpose 
find average  mean  avg, average  for first dimension 
find maximum  max  max, maximum  for first dimension 
find minimum  min  min, minimum  for first dimension 
inner product  a * b'  inner 
outer product  a' * b  outer 
sum of elements  sum  along columns  sumover  along 1st dimension (rows) 
generate linearly spaced vector  linspace(a,b,n)  zeroes(n)>xlinvals(a,b); 
Finding dimensions  
dimension sizes  size  shape or dims 
number of dimensions  ndims  ndims 
number of elements  numel  nelem 
Data Analysis
Programming and Data Types
ObjectOriented Programming
Graphics
3D Visualization
GUI Development
External Interfaces
in ABC order
 abs  Core perl abs works on PDLs as well
 cat  see pdl(), cat(), and append() for PDL routines
 double  in PDL::Core
 end  in Perl complex expressions are wrapped by curly braces { }, no end keyword is used
 exit  Core perl exit, the finish.m probably maps to the END blocks in Perl
 function  Core perl sub,
 if  See the if statement in perldoc
 length  no easy "get the size of the longest dimension" here, calculate as pdl($pdl>dims)>max, see dims in PDL::Core
 magic  see http://search.cpan.org/dist/MathMagicSquareGenerator or http://search.cpan.org/dist/MathMagicSquare
 max  see List::Util for lists
 repmat  see PDL dummy() and clump() methods
 size(A)  see PDL shape() method, also dims() which returns perl list and not PDL vector of values
 size(A, N)  see PDL dim() method
 um2str
 unique  see PDL uniq() method for values and uniqvec() for unique(A,'rows')
 uniq_pairs
 unix  Core perl qx{} or backtick
 zeros  see PDL zeros()
Other terms
 Mfiles  Modules in Perl with .pm extentsion and the package keyword at the beginning and/or *.pdl files (see PDL::AutoLoader)
 Creating a matrix: $matrix = pdl( [[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14 ,1] ] );
 sum($matrix) will return 136
 A'  transpose($matrix) from PDL::Basic
Toolbox
In this section we will list all the toolboxes that can be added to Matlab and see how they map to solutions using Perl and PDL.
Database Connectivity and Reporting
Perl (and thus PDL) can use DBI and the database drivers in the DBD::* namespace on CPAN